天天看點

每天一道面試題(10)--String練習題

請說出下面程式的輸出

public class String_Test {
    public static void main(String[] args) {
        String s1 = "Programming";
        String s2 = new String("Programming");
        String s3 = "Program";
        String s4 = "ming";
        String s5 = "Program" + "ming";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);
        System.out.println(s1 == s5);
        System.out.println(s1 == s6);
        System.out.println(s1 == s6.intern());
        System.out.println(s1 == s2.intern());
        System.out.println(s2 == s2.intern());
    }
}
           

結果:

false
true
false
true
true
false
           

解答上面的面試題需要知道如下知識點:

  1. String對象的intern()方法會得到字元串對象在常量池中對應版本的引用(如果常量池中有一個字元串與String對象的equals結果是true),如果常量池中沒有對應的字元串,則該字元串将被添加到常量池中,然後傳回常量池中字元串的引用;
  2. 字元串的+操作其本質是建立了StringBuilder對象進行append操作,然後将拼接後的StringBuilder對象用toString方法處理成String對象,這一點可以用javap-c StringEqualTest。class指令獲得class檔案對應的JVM位元組碼指令就可以看出來。