String物件的intern()方法的總結
阿新 • • 發佈:2018-12-13
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
猜測:
- s.intern()是把物件的引用加到方法區的常量池,並返回該引用,兩個引用指向同一個物件。為true
- s1.intern()是把這個物件拷貝到方法區的常量池,並返回該引用,兩個引用指向不同物件。s1.intern()指向常量池裡的物件,s1指向堆裡的物件。為false。
- 可見string的建立不同,產生的影響也不同。
注意:
- “java” 和"Java"在main函式執行前在常量池就有引用(猜測也可能是相應的物件)。
- String s2 = new String(“jav”)+new String(“a1”); 和 String s3 = new StringBuilder(“Ja”).append(“va2”).toString(); 也是true。