OOP System.out.println(Objekt)

vjung

Aktives Mitglied
FRAGE 1

Java:
public class GrandThaftAuto
{
public static void main(String[] args)
{
    Auto ford = new Auto();
    Auto bmw  = new Auto(370, 320, "schwarz", 2014);

   
    System.out.println(bmw);
}
}
Ausgabe:

Ich beschäftige mich momentan mit Referenzen und wollte fragen was genau das println aufruft. Ist das quasi die Stelle im Arbeitsspeicher in der die Klasse gespeichert ist? Da wenn ich als Paramater "ford" übergebe die selbe Ausgabe erscheint.


FRAGE 2:

System.out.println(bmw == ford) liefert mir das Ergebnis false.
wenn ich aber vorher festlege:
Java:
    Auto ford = new Auto();
    Auto bmw  = new Auto(370, 320, "schwarz", 2014);

    ford = bmw;

    System.out.println(bmw == ford);

Gehe ich richtig der Annahme das hier verglichen wird ob sich die Referenzen auf das selbe Objekt beziehen?
 

vjung

Aktives Mitglied
1: Das überrascht mich, bist du sicher? Wenn du dir ford und bmw hintereinander ausgeben lässt?

Ah ok wenn ich sie hintereinander ausgebe kommen da tatsächlich 2 verschiedene Adressen raus. Ich habe vorher nämlich den parameter einfach nur geändert und neu compiliert. Somit ist dies die Adresse die auf das Objekt verweist nehme ich nicht an.

Wenn ich "System.out.println(bmw = ford)" (Also beabsichtigt nur ein = anstatt ==), erhalte ich als ausgabe ebenfalls "Auto@6d06d69c". Wenn ich im nachhinein 2 println mit jeweils einer der Referenzen als Parameter ausgeben lasse bekomme ich nun bei jeder Ausgabe die selbe Adresse. Wurde hier somit wohl tatsächlich die beiden Referenzen auf das selbe Objekt verwiesen? Ich habe dies nämlich erst außerhalb einer println kennengelernt.
 

knilch

Bekanntes Mitglied
Hi,
... Somit ist dies die Adresse die auf das Objekt verweist nehme ich nicht an. ...
Du musst dich mal fragen, wieso mit System.out.println(bmw); "Auto@6d06d69c" ausgegeben wird:

Jede Klasse erbt von der Hauptklasse Object.
In dieser gibts u.a. die beiden Methoden:
Java:
public int hashCode() {
...
}
public String toString() {
...
}
Da alle Klassen von dieser Klasse automatisch erben, sind diese Methoden auch in allen Klassen verfügbar. Auch in den Klassen, die du erstellst.
Wenn nun neue Klassen erstellt werden, können
Java:
public int hashCode() {
   ...
}
und
public String toString() {
  ...
}

überschrieben werden.
Falls das nicht gemacht wird, wird die interne Adresse von der Instanz dieser Klasse als int konvertiert. Dieser Wert wird dann in der Methode Methode hashCode zurückgegeben. Wenn nun system.out.println(bmw); gemacht wird, dann wird in der toString-Methode der String "Auto@" + hashCode() zurück gegeben. Durch den Aufruf system.out.println(bmw); wird dann dies ausgegeben: "Auto@6d06d69c"
Das könnte dann so aussehen:
Java:
public String toString() {
   return this.getClass().getName() + "@" + hashCode();
}

In der API steht für die Hauptklasse Object:
http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode()
...As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) ...
Das heisst, dass dies nicht die Adresse ist, die mit hashCode zurück gegeben wird, sondern eine Zahl, welche die Adresse sein kann.
Wenn nun aus Objekten eine Datenstruktur gemcht wird, welche dann in HashMaps etc. eingefügt werden, sollten hashCode() und equals() überschrieben werden, da sonst Probleme auftauchen könnten (z.B. Wenn Objekte in einer List sortiert werden sollen). Wie diese Methoden überschrieben werden können und was auf was dabei zu achten ist, kannst du in der API nachlesen.
Wenn ich "System.out.println(bmw = ford)" (Also beabsichtigt nur ein = anstatt ==), erhalte ich als ausgabe ebenfalls "Auto@6d06d69c".
"=" ist ein Zuweisungs-Operator
"==" ist ein Vergleichsoperator.

Das passiert vielen Anfängern: Statt ein Vergleich wird eine Zuweisung gemacht. Da nun ford auf die Instanz von bmw zeigt wird das selbe zurückgegeben.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D System.out.println Java Basics - Anfänger-Themen 1
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
T System.out.println() Java Basics - Anfänger-Themen 5
R Input/Output Frage zu System.out.println Java Basics - Anfänger-Themen 5
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
V System.out.println zu JTextArea Java Basics - Anfänger-Themen 6
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
D system.out.println >> JTextArea Java Basics - Anfänger-Themen 1
O Frage zu System.out.println() Java Basics - Anfänger-Themen 1
A System.out.println() - Aufbau Java Basics - Anfänger-Themen 1
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
G classname.System.out.println(); ? Java Basics - Anfänger-Themen 2
O If in System.out.println Java Basics - Anfänger-Themen 11
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
C System.out.println Java Basics - Anfänger-Themen 4
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
D Frage zu System.out.println() Funktion Java Basics - Anfänger-Themen 6
I Zuerst "System.out.println" Java Basics - Anfänger-Themen 3
T Jar-Archive kein System.out.println()?? Java Basics - Anfänger-Themen 5
S Einfaches int Array gibt über System.out.println merkwürden Wert aus Java Basics - Anfänger-Themen 9
K Methode System.out.println() Java Basics - Anfänger-Themen 4
S System.out.println gibt diesen Wert aus: Klasse@f102d3 Java Basics - Anfänger-Themen 3
J System.out.println(. + (found ? "" : "k" Java Basics - Anfänger-Themen 8
C Wie funktioniert System.out.println intern? Java Basics - Anfänger-Themen 3
A System.out.println() lesen Java Basics - Anfänger-Themen 3
L System.out.println() Java Basics - Anfänger-Themen 4
R System.out.println wird nicht angezeigt Java Basics - Anfänger-Themen 3
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
G Out.println oder System.out.println Java Basics - Anfänger-Themen 25
M Wo liegt der Quelltext von System.out.println() Java Basics - Anfänger-Themen 3
T System.out.println - Compiler-Fehler Java Basics - Anfänger-Themen 22
C System.out.print oder println ? Java Basics - Anfänger-Themen 2
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
O System.out array Java Basics - Anfänger-Themen 4
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
I System.currentTimeMillis() nutzen Java Basics - Anfänger-Themen 2
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
B Input/Output System.out.print mit und ohne "" Java Basics - Anfänger-Themen 5
M System.property persistieren Java Basics - Anfänger-Themen 6
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
S System.out.printIn("Hello, World!"); Java Basics - Anfänger-Themen 3
A Passwort System Java Basics - Anfänger-Themen 4
N Input/Output System.in funktioniert nicht Java Basics - Anfänger-Themen 4
E Was ist die JRE System Library? Java Basics - Anfänger-Themen 3
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N System Proxy verwenden Java Basics - Anfänger-Themen 0
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
D JDK installieren No JVM could be found on your system. Java Basics - Anfänger-Themen 9
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
M Variablen Ausgabe bei System.out.format? Java Basics - Anfänger-Themen 3
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
C Input/Output System.in.read() gibt nicht -1 zurück? Java Basics - Anfänger-Themen 3
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
H Einfluss von System.out auf Programm Java Basics - Anfänger-Themen 2
K System.currentTimeMillis() und die Sommerzeit Java Basics - Anfänger-Themen 5
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
R Char wird in System.out.print(); nicht ausgegeben Java Basics - Anfänger-Themen 6
T System.out.print : Frage zu Aufbau Java Basics - Anfänger-Themen 4
P Update System Java Basics - Anfänger-Themen 16
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
J HILFE Benutzen einer Klasse aus JRE System Library Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
N Erste Schritte Ausgabe in System.out Java Basics - Anfänger-Themen 13
D Scanner(System.in) Schleife Java Basics - Anfänger-Themen 7
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
H System.out umleiten Java Basics - Anfänger-Themen 5
J Erste Schritte System.out.print (Fehlermeldung) Java Basics - Anfänger-Themen 14
C System.out in String schreiben Java Basics - Anfänger-Themen 2
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
X Eclipse System.out.print fehler Java Basics - Anfänger-Themen 5
K char-int-Addition in System.out.print Java Basics - Anfänger-Themen 3
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
N Erste Schritte System.err und System.out Java Basics - Anfänger-Themen 5
Z System.out.format, Hilfe. Java Basics - Anfänger-Themen 14
R System.exit mit String als Rückgabedatentyp Java Basics - Anfänger-Themen 3
G Input/Output System.err zusätzlich in Datei schreiben Java Basics - Anfänger-Themen 27
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben