Java面試:Q2. String物件在java中如何被管理

ADVERTISEMENT

A: String類在java中被設計成輕量級的,所謂輕量級是指在實際使用過程中,無需在記憶體中建立各種字元串也能保證字元創重複使用。

字元串常量池是為String類所管理的,當intern方法被呼叫的時候,實際上"equals(...)"也被呼叫來去String常量池中查詢某一個該值是否存在。如果存在,則直接放回常量池中該值的引用,否則在常量池中建立該值,並返回改值的引用。

所以,對於任意兩個字元串s1,s2。 s1.intern == s2.intern 返回true的唯一條件是:s1.equals(s2) 返回true

所以,intern方法最終返回的隻可能會是常量池內值的引用

樣例如下:

public static void main(String args){

String s1 = new String("A");

ADVERTISEMENT

String s2 = new String("A");

System.out.println(s1 + " equals " + s2 + "--> " + s1.equals(s2)); //true

System.out.println(s1+" == "+s2+": "+(s1 == s2)); // false;

System.out.println(s1+".intern == "+s2+".intern: "+(s1.intern ==s2.intern)); // true;

String s3 = "A";

String s4 = new String("A").intern;

System.out.println(s2+" == "+s3+": "+(s2 == s3)); // false;

ADVERTISEMENT

System.out.println(s3+" == "+s4+": "+(s3 == s4)); // true

}

其物件引用關係大致為:

ADVERTISEMENT
ADVERTISEMENT