Einführung in veränderliche Objekt in Java anhand der Klasse "StringBuffer" im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. (StringBuffer), Lektion, Seite 720868
https://www.purl.org/stefan_ram/pub/java_veraenderliche_objekte_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Veränderliche Objekte mit versteckten Feldern am Beispiel der Klasse "StringBuilder"

Ein Objekt kann einen zeitlich veränderlichen Teil, den Zustand, haben. Ein solcher Zustand kann veränderlich (engl.: “mutable ”) sein.

Objekte der Klasse »String« sind unveränderlich (engl.: “immutable ”). In manchen Situationen erscheint es vielleicht so, also ob solche Objekte durch bestimmte Operationen veränderlich seien, doch tatsächlich wird zur Darstellung eines neuen Wertes durch Operationen stets ein neues Objekt  dieser Klassen erzeugt, ohne daß dabei die vorhandenen Objekte verändert werden.

Unveränderliche  Objekte stellen praktisch bestimmte Werte dar. Ein Typ von unveränderlichen Objekten kann daher auch als ein Werttyp  angesehen werden. Allerdings sind Objekte solcher Werttypen keine perfekte Darstellung von Werten, da zwei Objekte, die den gleichen Wert darstellen, unterschiedlich sein können—wenn man den Java -Operator "==" zugrundelegt—, wie etwa die Werte der beiden Bezeichner in dem Block "{ final java.lang.String s = new java.lang.String( "2" ); final java.lang.String j = new java.lang.String( "2" ); }". Am Ende dieses Blocks ist ja die Aussage "i == j" falsch und zum Wertvergleich muß die Versendung "i.equals( j )" herangezogen werden. Dieses Problem verschwindet aber, wenn man es akzeptiert, daß die Methode "equals" in diesem Fall eben das  Mittel zum Vergleichen ist.

Veränderliche  Objekte werden verwendet, um veränderliche Gebilde zu modellieren. Ein Typ solcher Objekte kann auch als ein Wertspeichertyp  angesehen werden, da die Objekte Ähnlichkeit mit Wertspeichern haben.

Manchmal werden veränderliche Objekte auch unveränderlichen Objekten vorgezogen, weil mit ihnen bestimmten Vorgänge effizienter realisiert werden können als mit unveränderlichen Objekten, die möglicherweise das aufwendige Erstellen eines neuen Objektes öfter nötig machen. Allerdings darf nicht pauschal angenommen werden, daß Operationen auf veränderlichen Objekten immer schneller wären als Operationen mit unveränderliche Objekten. Diese Frage sollte bei Bedarf untersucht werden, die Ergebnisse werden auch von der verwendeten Java -Implementation abhängen.

Die Klasse "StringBuilder"

Java  kennt einen Klasse "StringBuilder" (Textspeicher, engl.: “string buffer ” – da der Name »StringBuffer« aber schon für eine andere Klasse verwendet wurde: »StringBuilder«), deren Objekte Speicher  für einen String -Wert darstellen. Ein solches Objekt kann einen bestimmten Text enthalten, der durch Aktionen verändert werden kann.

Bestimmte Empfehlungen, Objekte der Klasse "StringBuilder" zu verwenden, weil einzelne Operationen damit schneller seien als mit Objekten der Klasse "String" sind teilweise veraltet, da dieser Unterschied bei aktuellen Java -Implementationen nicht mehr so wie früher besteht. In Einzelfällen kann die Verwendung von Objekten der Klasse "StringBuilder" zwar zu einer Beschleunigung führen, ob das so ist muß dann aber bei Bedarf untersucht werden.

Ein Textspeicher kann mit einem Argument vom Typ "String" angelegt werden, das dann bis auf weiteres den Text des Textspeichers festlegt. Durch verschiedene Operationen kann dann der Inhalt des Textspeichers verändert werden. Mit der Operation "setCharAt( int position, char zeichen )" wird das Zeichen "zeichen" an der Textposition "position" festgelegt (das erste Zeichen hat die Position 0, das zweite die Position 1, und so weiter), die Operation "deleteCharAt( int )" löscht das Zeichen bei der angegebenen Position, und die Operation "insert( int, char )" fügt ein Zeichen bei der angegebenen Position ein.

(Ein Ausdruck der Art wie »'e'« [ein Schriftzeichen in Apostrophen] hat den Typ »char« und steht für das Zeichen zwischen den Apostrophen.)

Main.java
public class Main 
{ public static void main( String[] args ) 
{ final StringBuilder t = new StringBuilder( "Hallo!" ); 
; System.out.println( t ); 
t.setCharAt( 1, 'e' ); System.out.println( t ); 
t.deleteCharAt( 2 ); System.out.println( t ); 
t.insert( 2, 'l' ); System.out.println( t ); }}

System.out
Hallo! 
Hello! 
Helo! 
Hello!

Wir haben Felder von Objekten bereits in Point2D.Double gesehen. Die Klassen String und StringBuilder enthalten ebenfalls Felder, bei diesen Klassen sind die Felder aber verborgen.

Einige Beobachtungen [Neu]

Unter dem „Zustand“ eines Objektes kann man sich die Werte vorstellen, die sich in allen seinen Feldern befinden.

Main.java
public class Main
{ public static void main( final java.lang.String[] args ))
{ java.lang.String s = "abc";
s.replace( "a", "x" );
java.lang.System.out.println( s ); }}
Protokoll
Main.java:2: error: ';' expected
{ public static void main( final java.lang.String[] args ))
^
1 error
Main.java

public class Main
{

public static void m( final java.lang.Object o )
{ java.lang.System.out.println( o.toString() ); }

public static void main( final java.lang.String[] args )
{ m( java.lang.System.out );
m( "abc" ); }}

Protokoll
java.io.PrintStream@15db9742
abc
Zitat aus der Dokumentation der Klasse »java.lang.Object« (gilt auch für Unterklassen, wenn nicht anders angegeben)
getClass().getName() + '@' + Integer.toHexString(hashCode())
Zitat aus der Dokumentation der Klasse »java.lang.String« (spezielle Regelung „überschreibt“ allgemeine Regelung)
This object (which is already a string!) is itself returned.

Die Methode »hashCode()« liefert eine mehr oder weniger willkürliche Zahl, die bei jedem Objekt während seiner Existenz immer gleich ist. Es ist aber nicht ausgeschlossen, daß diese Zahl für zwei verschiedene Objekte übereinstimmt.

Übungsfragen

?   Übungsfrage

Was gibt das folgende Programm aus?

Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.String s = "abc";
s.replace( "a", "x" );
java.lang.System.out.println( s ); }}

?   Übungsfrage [Neu]

Welche zwei Zeichen muß man in das folgende Programm einfügen, damit es »xbc« ausgibt?

Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.String s = "abc";
s.replace( "a", "x" );
java.lang.System.out.println( s ); }}

?   Wandlung nach String

Wie kann ein Objekt der Klasse "StringBuilder" in ein Objekt der Klasse "String" verwandelt werden? (Obwohl das in dieser Lektion nicht explizit behandelt wurde, sollte die Antwort aufgrund allgemeiner Prinzipien der Programmiersprache Java  ohne weitere Nachforschungen bekannt sein.)

?   Fehler korrigieren

Der Autor des folgenden Programms wollte die Leerzeichen am Anfang und am Ende des Textes "s" entfernen und das Ergebnis ausgeben. Welche Fehler enthält das Programm? Wie könnten diese Fehler so behoben werden, daß das Programm die gewünschte Ausgabe "Haus" (ohne Leerzeichen) erzeugt, die von dem Programm aus der Konstante "s" durch Entfernen der in ihr enthaltenen Leerzeichen erzeugt werden soll?
TrimIt.java
public class TrimIt
{ public static void main( String[] args )
{ final String s = " Haus ";
s.trim;
System.out.println( s ); }}

Übungsaufgaben Getter und Setter

Ein Getter ist eine Wertmethode, ein Setter ist eine Wirkmethode. Für diese Übungsaufgabe wird vorausgesetzt, daß bekannt ist, wie Wertmethoden und Wirkmethoden normalerweise jeweils aufgerufen werden.

/   Getter ←

Die statische Methode »java.util.logging.Logger.getLogger(java.lang.String)« ergibt ein Objekt der Klasse »java.util.logging.Logger« mit dem als Argument angegebenen Namen.

Erstellen Sie zwei Objekte der Klasse »java.util.logging.Logger« mit zwei verschiedenen Namen.

Rufen Sie die Methode »getName()« beider Objekte auf und geben Sie die Ergebnisse jener beiden Aufrufe aus.

/   Getter und Setter ←

Aussprachehinweis
zone zoʊn

Die statische Klassenmethode »java.util.TimeZone.getDefault()« liefert ein Objekt der Klasse »java.util.TimeZone«. Dieses Objekt enthält eine Kennung (eine Zeichenfolge), eine Methode »getID()« und eine Methode »setID(java.lang.String)«. Die Methode »getID« ergibt die Kennung jenes Objektes, und »setID« erlaubt es, die Kennung jenes Objektes festzulegen. Schreiben Sie ein Programm, in dem die Kennung jenes Objektes ausgegeben, als die Zeichenfolge »GMT+00:00« festgelegt und dann erneut abgefragt und ausgegeben wird.

?   Sind Textspeicher unabhängig voneinander? ⃗

Teilen sich alle Objekte der Klasse "StringBuilder" einen Speicher oder hat jedes Objekt seinen eigenen Speicher? Erzeugen Sie zwei Objekte dieser Klasse und untersuchen Sie, ob jedes einen eigenen Textspeicher enthält oder eine Veränderung an einem Objekt das andere Objekt beeinflußt.

?   Sind Textspeicher unabhängig voneinander? ⃗

Verwenden Sie »final StringBuilder t = new StringBuilder( "Hallo!" ); final StringBuilder s = t;« in einem Block und nehmen Sie dahinter eine Veränderung am Objekt »s« vor. Untersuchen Sie dann, ob diese sich auch auf das Objekt »t« ausgewirkt hat.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720868 stefan_ram:720868 StringBuffer source, source code,sourcecode, Programmier sprache java, Java Programm Java Programmiersprache Java Sprache Java Programmierung Programmieren in Java, Die Programmiersprache Java Javapgrammierung, Java-Programmierung, Java2, Java1.2, Java1.3, Java1.4, Java1.5, Java 2, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, Java 1.7, Java 1.8, Java 8, Java 1.9, Java 9, Java 1.10, Java 10, Tiger, Dolphin, objektorientierte Programmierung, Java sun, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720868, slrprddef720868, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_veraenderliche_objekte_de