K rozhodnutí, zda překládá java výrazy
String a = "abcdefg"
a
String a = new String("abcdefg")
jsem si vytvořil dva programy:
public class Test1 {
public static void main (String [] args) {
String a = "abcdefg";
}
}
a
public class Test2 {
public static void main (String [] args) {
String a = new String ("abcdefg");
}
}
První má po přeložení (tj. soubor Test1.class) 275B, druhý (soubor Test2.class) má 338B. Pomocí programu javap lze převést bytecode do čitelného tvaru, metoda main v prvním programu vypadá následovně:
Method void main(java.lang.String[])
0 ldc #2 <String "abcdefg">
2 astore_1
3 return
Metoda main v druhém programu vypadá následovně:
Method void main(java.lang.String[])
0 new #2 <Class java.lang.String>
3 dup
4 ldc #3 <String "abcdefg">
6 invokespecial #4 <Method java.lang.String
(java.lang.String)>
9 astore_1
10 return
Testy jsem prováděl pod Windows XP s JDK 1.4.0
Luboš Pavlíček
P.S. Též jsem si myslel, že to přeloží stejně. Z tohoto příkladu nevyplývá, jak to přeloží jiné překladače (jikes, SDK od IBM, ...).