StringReader - Fragen

N

NotWise

Gast
Guten Abend Leute,

ich muss gerade für meine Übungsaufgabe die Klasse StringReader verwenden und bei der Benutzung dieser stellen sich mir ein paar Fragen, wie folgt :

1.) Wenn ich in einer Funktion als Argument eine Instanz der Klasse StringReader übergeben bekomme ( im Folgenden : "reader" ), kann ich dann eine neue Instanz von StringReader als Kopie von reader anlegen? Die Kostruktoren sehen so aus, als wäre das ohne Weiteres nicht möglich. Wenn ich zB StringReader newReader = reader; schreibe, würde ich ja nur eine Referenz auf das übergebene Objekt bekommen, sehe ich das richtig ? Schließlich gibt es zB keinen Konstruktor StringReader ( StringReader other ) ( copy ctor ). Wenn ich also mit einer Kopie des übergebenen Argumentes arbeiten will, bleibt mir nichts anderes übrig, als den String aus reader mit vielen read() aufrufen auszulesen ( da toString() nur Unsinn ausgibt ) und dann mit diesem entstanden String ein neuen StringReader zu erzeugen ( da ja StringReader ( String text ) existiert ) ?

2.) Das bringt mich zur nächsten Frage : Entfernt die read() Methode das gelesene Zeichen aus dem internen Buffer von StringReader? Die Dokumentation über StringReader sagt dazu leider nichts.

Vielen Dank schon mal und schönen Abend noch!

Mfg
 
N

NotWise

Gast
Eine dritte, allgemeine Frage stellt sich mir hier direkt nach dem Durchlesen von meinem eigenen Posting :

Wer legt fest, ob foo ( someObj ); eine Kopie von someObj oder eine Referenz davon übergibt?
In C++ ist das anhand der Signatur fest geregelt, in Java hat mir allerdings noch nie jemand eine Regel dafür genannt ( was nicht heißen soll, dass es keine gibt ). Sprich : Woher weiß ich ob ich in meinen Funktionen mit einer Kopie oder einer Referenz arbeite?
 

mjdv

Bekanntes Mitglied
Eine dritte, allgemeine Frage stellt sich mir hier direkt nach dem Durchlesen von meinem eigenen Posting :

Wer legt fest, ob foo ( someObj ); eine Kopie von someObj oder eine Referenz davon übergibt?
In C++ ist das anhand der Signatur fest geregelt, in Java hat mir allerdings noch nie jemand eine Regel dafür genannt ( was nicht heißen soll, dass es keine gibt ). Sprich : Woher weiß ich ob ich in meinen Funktionen mit einer Kopie oder einer Referenz arbeite?

Primitive Datentypen werden immer kopiert, Arrays und Objekte werden immer als Referenz übergeben!
 

Timothy Truckle

Top Contributor
Primitive Datentypen werden immer kopiert, Arrays und Objekte werden immer als Referenz übergeben!
Damit verwirrst Du den C++-Kenner.
In Java gibt es ausschlißlich "call by value".
Deswegen funktionieren Zuweisungen an Parameter nicht als "Rückgabewert". Wenn also eine Referenz als Parameter übergeben wird, entsteht daraus in der aufgerufenen Methode eine neue Referenz mit dem selben Wert, wie in der aufrufenden Methode. Wenn man die Referenz in der aufgerufenen Methode auf ein neues Objekt zeigen lässt bekommt die aufrufende Methode (genauer die Referenz dort) das nicht mit.

bye
TT
 

Timothy Truckle

Top Contributor
1.) Wenn ich in einer Funktion als Argument eine Instanz der Klasse StringReader übergeben bekomme ( im Folgenden : "reader" ), kann ich dann eine neue Instanz von StringReader als Kopie von reader anlegen?
Nein.
Wozu brauchst Du denn eine Kopie des Readers?


Wenn ich zB StringReader newReader = reader; schreibe, würde ich ja nur eine Referenz auf das übergebene Objekt bekommen, sehe ich das richtig ?
Ja.
Genauer weist Du den Wert der übergebenen Referenz einer weiteren Referenz zu.

Wenn ich also mit einer Kopie des übergebenen Argumentes arbeiten will, bleibt mir nichts anderes übrig, als den String aus reader mit vielen read() aufrufen auszulesen
Du kannst einen [JAPI]BufferedReader[/JAPI] drumrum wrappen.
Code:
readLine()
ist nämlich etwas angenehmer.
( da toString() nur Unsinn ausgibt )
Zuerst mal ist StringReader ja ein Reader und als solcher kennt er die Anzahl der folgenden Zeichen eigentlich nicht.
Code:
toString()
soll aber bei jedem Aufruf den gleichen, für das Objekt charakteristischen Text ausgeben (vereinfacht: ein Text basierter Hashcode). Das geht bei Reader prinzipbedingt nicht.
und dann mit diesem entstanden String ein neuen StringReader zu erzeugen ( da ja StringReader ( String text ) existiert ) ?
Also Ich habe bei Deiner Anforderung 2 Fragen:
1. (wie schon gesagt) wozu brauchst Du eine Kopie? Anders als in C++ brauchst Du Dir ja keine Sorgen darüber machen, ob jemand anders zwichenzeitlich das Parameter-Objekt frei gibt...
2. Wieso ist der Parameter von Typ StringReader? Die basisclasse Reasder wäre doch viel sinnvoller weil flexibler...

2.) Das bringt mich zur nächsten Frage : Entfernt die read() Methode das gelesene Zeichen aus dem internen Buffer von StringReader? Die Dokumentation über StringReader sagt dazu leider nichts.
Ja. Das Zeichen ist "verbraucht".

bye
TT
 
Zuletzt bearbeitet:
N

NotWise

Gast
Damit verwirrst Du den C++-Kenner.
In Java gibt es ausschlißlich "call by value".
Deswegen funktionieren Zuweisungen an Parameter nicht als "Rückgabewert". Wenn also eine Referenz als Parameter übergeben wird, entsteht daraus in der aufgerufenen Methode eine neue Referenz mit dem selben Wert, wie in der aufrufenden Methode. Wenn man die Referenz in der aufgerufenen Methode auf ein neues Objekt zeigen lässt bekommt die aufrufende Methode (genauer die Referenz dort) das nicht mit.

bye
TT

Also arbeite ich jetzt doch immer mit Kopien und werde nie das selbe Verhalten haben, wie bei Pointer-Argumenten in C++ ? ( foo ( T* someVal ) )
 

Timothy Truckle

Top Contributor
Also arbeite ich jetzt doch immer mit Kopien
Du arbeitest mit einer Kopie der Referenz.
Das referenzierte Objekt wird nicht kopiert.

und werde nie das selbe Verhalten haben, wie bei Pointer-Argumenten in C++ ? ( foo ( T* someVal ) )
Welchen Teil diese Verhaltens meinst Du?
Du kannst eine Referenz (was dem C-Pointer recht nahe kommt) an eine Methode weitergeben. Nicht mehr aber auch nicht weniger.

bye
TT
 
N

NotWise

Gast
Du arbeitest mit einer Kopie der Referenz.
Das referenzierte Objekt wird nicht kopiert.

Huh, das verstehe ich jetzt nicht. Das klingt effizienter, aber ... . Wenn ich zB in C++ 2 Referenzen auf ein Objekt habe, dann ändert sich das referenzierte Objekt beim Verändern sowohl der einen als auch der anderen Referenz.
Gleiches müsste dann doch auch in Java geschehen, wenn ich eine Referenz kopiere erhalte ich ja eine, die trotzdem auf mein Ursprungsobjekt zeigt?

Code:
int A = 5;    // A == 5
int& rA = A; 
rA = 100;    // A == 100
int& rB = A; 
rB = 200;    // A == 200

Genau dieses Verhalten meinte ich auch. Nur eben, dass die Zuweisungen innerhalb eines anderen Scopes ( Funktion in dem Fall ) geschehen.
 

Timothy Truckle

Top Contributor
Huh, das verstehe ich jetzt nicht. Das klingt effizienter, aber ... . Wenn ich zB in C++ 2 Referenzen auf ein Objekt habe, dann ändert sich das referenzierte Objekt beim Verändern sowohl der einen als auch der anderen Referenz.
Gleiches müsste dann doch auch in Java geschehen, wenn ich eine Referenz kopiere erhalte ich ja eine, die trotzdem auf mein Ursprungsobjekt zeigt?
Vergiss, was Du aus C++ über Referenzen weist. In Java ist eine Referenz einfach eine Variable, mit der man ein Objekt (von einem bestimmten Typ) "festhält".
Den
Code:
&
-Operator um auf Adressen zuzugreifen gibt es in Java nicht. Überhaupt kannst Du in Java niemals auf die Speicheradresse eines Objekts zugreifen. Das geht schon deshalb nicht, weil der GarbageCollector Objekte nach eigenem Gutdünken wild im Speicher hin- und her- verschieben kann, wir er es gerade braucht. Java sorgt intern dafür, dass deine Referenzen danach immer noch auf die selben Objekte (an ihren neuen Speicheradressen) zeigen.

bye
TT
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Was ist ein StringReader und wofür braucht man ihn? Java Basics - Anfänger-Themen 2
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
H grundlegende Fragen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
N Programm: Fragen beantworten Java Basics - Anfänger-Themen 6
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
D [Fragen] zu Methoden Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
S 2 Fragen Java Basics - Anfänger-Themen 4
S Hallo und Fragen zu Arbeitsverzeichnis und Menü Java Basics - Anfänger-Themen 8
N Java Fragen... Java Basics - Anfänger-Themen 10
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
O HashMap Fragen Java Basics - Anfänger-Themen 8
C Fragen zu Arrays Java Basics - Anfänger-Themen 19
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
S Fragen zu Arrays Java Basics - Anfänger-Themen 6
K Diverse Fragen zum Fehlerlogging Java Basics - Anfänger-Themen 9
C Einige Fragen zu Frames Java Basics - Anfänger-Themen 7
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Methoden Aquarium (Fragen zum Scanner) Java Basics - Anfänger-Themen 5
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
O Zwei Fragen zu Methoden Aufrufen Java Basics - Anfänger-Themen 5
B fragen zur for-schleife und arrays Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben