Ich habe es gerade ausprobiert: Hieran optimiert der Compiler nichts, also das "new String()" steht auch noch im Bytecode:
(Ich habe das mit javac compiled und anschließend mit JD-GUI decompiled)
Das selbe ist das auch nicht: new String() legt immer ein neues Objekt an, während "" den leeren String höchstens einmal anlegt, und dann immer wieder das selbe Objekte verwendet. Deswegen liefert auf die Bedingung
wahr, obwohl nicht mit equals() verglichen wird.
Code:
public class test
{
public String meh()
{
String str = new String();
str = "Hello World";
return str;
}
}
Das selbe ist das auch nicht: new String() legt immer ein neues Objekt an, während "" den leeren String höchstens einmal anlegt, und dann immer wieder das selbe Objekte verwendet. Deswegen liefert auf die Bedingung
Code:
"abc" == "abc" && "" == "" && new String("") != new String("")