Ich habe es gerade ausprobiert: Hieran optimiert der Compiler nichts, also das "new String()" steht auch noch im Bytecode:
Code:
public class test
{
public String meh()
{
String str = new String();
str = "Hello World";
return str;
}
}
(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
Code:
"abc" == "abc" && "" == "" && new String("") != new String("")
wahr, obwohl nicht mit
equals() verglichen wird.