[Java vs. C++] Unterschied zw. Objekt und Referenz auf Objekt



  • Ich habe hier einen Text, in dem steht:

    In Java wird nicht zwischen dem Typ eines Objekts obj und dem Typ der Referenz auf obj unterschieden.
    Im Gegensatz dazu werden in C++ Objekte und Objektreferenzen typmaessig unterschieden.

    Kann mir jemand das mal genauer erklaeren, auch mit den daraus resultierenden Konsequenzen?
    Als C++-Programmierer habe ich im Moment keine Wirkliche Vorstellung, was der Satz eigentlich nun genau bedeutet.

    Danke im Voraus!



  • Object a=new Object();
    a.setValue(4);
    Object b=a;
    b.setValue(5);
    a.getValue() == 5
    
    Object a;
    a.setValue(4);
    Object b=a;
    b.setValue(5);
    a.getValue() == 4
    Object& c=a;
    c.setValue(6);
    a.getValue() == 6
    


  • Die oben zitierte Aussage ist schlichtweg falsch. Es werden Objekte und Referenzen unterschieden. Die Semantik ist entsprechend grundverschieden.
    Der einzige Unterschied ist, dass in Java nicht explizit dereferenziert wird, weil es anhand der Sprache immer eindeutig ist, was jetzt geschehen soll.

    getText().putIntoBucket();



  • @AllesWisser: Bitte unterlasse solche sinnlosen Postings. Ich habe eine konkrete Frage gestellt.

    Jahe, verwende einfach nicht Java. Das ist voll langsam. C++ ist geil!

    Danach habe ich nicht gefragt

    @Shade of Mine:
    Und was hat das jetzt fuer Konsequenzen?
    Was fuer ein Sinn stekckt dahinter?

    @Optimizer:Das soll falsch sein?? ­čś« Der Text stammt aus dem aktuellen Java Kurs der Fernuniversitaet Hagen. Bist du dir wirklich ganz sicher??



  • In Java wird nicht zwischen dem Typ eines Objekts obj und dem Typ der Referenz auf obj unterschieden.

    Das ist mit Sicherheit nicht richtig. Es findet keine syntaktische Unterscheidung statt, das ist richtig, aber die Semantik (z.B. bei einer Zuweisung) ist unterschiedlich. d.h. Referenzen und Objekte (wie ein int z.B., Objekte k├Ânnen ja auch primitiv sein) verhalten sich unterschiedlich bei '=' und '=='.
    Kann man jetzt spitzfindig finden, ist aber ein IMHO signifikanter Unterschied, den man kennen muss und ich finde, dass der Satz auf eine falsche F├Ąhrte f├╝hrt. Man sollte das konkretisieren.



  • Und weil du die Konsequenzen wissen wolltest:
    Bei Referenzen wird beim Einsatz von '==' die Identit├Ąt verglichen, bei primitiven Typen der Wert. Gleiches gilt f├╝r die Zuweisung, Referenzen zu kopieren hei├čt nicht, das Objekt zu kopieren. Es findet, wie beim Kopieren von C++-Pointern eine ├ťberlagerung von Namen statt, ├╝ber die beide das selbe Objekt manipuliert werden kann.



  • Optimizer: Deine Theorie wird wesentlich vereinfacht, wenn du primitive Typen nicht als Objekte bezeichnest.

    Ich sehe primitive Typen und Referenzen in einer Schublade, und Objekte in der anderen Schublade. Primitive Typen und Referenzen kann ich by-value ├╝bergeben, auf dem Stack ablegen, zuweisen, bei == wird der Wert verglichen. An Objekte komm ich direkt gar nicht ran, weil es keinen Ausdruck gibt, der als Ergebnis ein Objekt hat. Ich kann sie nur -- indirekt, wenn man so will -- ├╝ber Referenzen ansprechen.


Log in to reply