S
stev.glasow
Gast
Code:
Integer a = Integer.valueOf(88);
Integer b = Integer.valueOf(88);
System.out.println(a == b);
// Ausgabe: treu
Kennt ihr noch mehr solche Schoten?
Integer a = Integer.valueOf(88);
Integer b = Integer.valueOf(88);
System.out.println(a == b);
// Ausgabe: treu
String s0,s1 = s0 = "Bin neu hier.";
willkommen in Java 5stevg hat gesagt.:valueOf(int) cachet die Instanzen der Werte -128 < x < 128 und liefert die jeweilige Instanz zurück. (Is bissel blöd erklärt.)Code:Integer a = Integer.valueOf(88); Integer b = Integer.valueOf(88); System.out.println(a == b); // Ausgabe: treu
Kennt ihr noch mehr solche Schoten?
Hm, und nu? Oder hast du in dem Satz ne Frage versteckt? Wegen dem Fragezeichen.meez hat gesagt.::bahnhof:
Ich versteh nur ..ähh... Ich versteh eigentlich gar nichts...?
Unverständlicher Weise nicht.0xdeadbeef hat gesagt.:IMHO war das aber mit Stringliteralen auch schon immer so.
String a = "Lurch";
String b = "Lurch";
boolean lurchi = (a == b);
Java ist auch eine Insel hat gesagt.:für jedes Zeichenketten-Literal im Programm wird (bei Bedarf) automatisch ein entsprechendes String-Objekt erzeugt. Dies geschieht für jede konstante Zeichenkette höchstens einmal, egal wie oft sie im Programmverlauf benutzt wird.
return new String()
man kann aber auch um den Wrapper Dingesn aus dem Weg zu gehen mit arrays arbeitenstevg hat gesagt.:Wenn du z.B. nen int in einer Collection verwenden willst, könnte die Wrapper Klasse ganz praktisch sein :bae:
int x[var];
int x[20];
Hä? Ohne Konstruktor?Mir drängt sich die Frage auf warum man für Integer, String, usw...überhaupt einen public Konstruktor zulässt und so unnöte Objekte vermeidet?
würde ja wohl nix bringen, da ist doch new Integer(123434) genauso gut??Integer.newInstance(123434);
Ein Vergliech mit == hat bei Strings und den Wrapper-Klassen fast NIE einen Sinn, in Java 5 sogar noch weniger als früher (weitere Verwirrung durch boxing)Gäbe es den nicht könnte man Strings auch problemlos mit '==' vergleichen und es würde im Anfängerbereich
ungefähr 1000 Threads zum Thema Stringvergleich weniger geben
Weil man mit == nicht den Inhalt vergleicht sondern ob es die gleiche Referenz ist.thE_29 hat gesagt.:Man hätte bei den Strings ja eigentlich auch den == operator überschreiben können ;>
Warum isn das eigentlich nicht gemacht worden? Weil der + operator ist ja auch überschrieben...
Wären halt viele Fragen weniger, warum das nicht geht wenn ich if(string == "HALLO") mache
Och Operatorenüberladen is Schnickschnack. Was ist verständlicher ohne groß in der Doku der entsprechenden Klasse zuschauen? a + b oder a.append(b)?thE_29 hat gesagt.:Naja, hast recht, dann würde Referenz vergleich wegfallen. Aber braucht man den so oft??
Manchmal isses für mich ärgerlich das man keine Operatoren überladen kann, das war in C++ super
Aber was solls, man kommt auch ohne aus
0xdeadbeef hat gesagt.:Hier werden Referenzen verglichen, die ja nur dann gleich sind, wenn sie tatsächlich auf das selbe Objekt verweisen. Per "valueOf" erzeugt man also keine neuen Instanzen, wenn ein Objekt gleichen Inhalts bereits existiert.´
en...
stevg hat gesagt.:Das ist nicht ganz das gleiche, das was in dem Zitat erwähnt wird läuft "intern" ab, denn new String("hallo") == "hallo" ergibt ja false, aber trotzdem wird nur eine Zeichenkette gespeichert. (Kein Plan wer das jetzt Regel, hatte eigentlich angenommen das dass die VM macht und nicht der Compilier.)
Und das mit Integer.valueOf(int) läuft nicht so, das wurde einfach mit Java so programmiert.
[edit]
oder so ähnlich :?
Aha also doch der Compiler, aber die Zeichenkette ist doch aber trotzdem nur einmal im Speicher vorhanden, oder?Kirsche hat gesagt.:new Strinf("hallo") wird zur Laufzeit erstellt "hello" kann er schon beim Compilieren umsetzen und behandelt er so komplett anders.
Welchen Unterschied meinst du? Ich hatte von dem Unterschied zwischen String und Integer.valueOf(int) gesprochen.Kirsche hat gesagt.:Deswegen der Unterschied!