1. 程式人生 > >String物件的intern()方法的總結

String物件的intern()方法的總結

char[] a={'a','d','f','r'};
String s = new String(a,0,4);
System.out.println(s==s.intern());
        
String s1 = new String("hello");
System.out.println(s1==s1.intern());

輸出: true false

用的是jdk1.8

猜測:

  1. s.intern()是把物件的引用加到方法區的常量池,並返回該引用,兩個引用指向同一個物件。為true
  2. s1.intern()是把這個物件拷貝到方法區的常量池,並返回該引用,兩個引用指向不同物件。s1.intern()指向常量池裡的物件,s1指向堆裡的物件。為false。
  3. 可見string的建立不同,產生的影響也不同。

注意:

  1. “java” 和"Java"在main函式執行前在常量池就有引用(猜測也可能是相應的物件)。
  2. String s2 = new String(“jav”)+new String(“a1”); 和 String s3 = new StringBuilder(“Ja”).append(“va2”).toString(); 也是true。