Hlavní navigace

Názor k článku PMD - statická analýza kódu od Lubos Pavlicek - K rozhodnutí, zda překládá java výrazy String a...

  • Článek je starý, nové názory již nelze přidávat.
  • 7. 3. 2003 20:50

    Lubos Pavlicek (neregistrovaný)

    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, ...).