Java代碼
String s1 = “abc”;
這個字符串s1被賦予瞭值“abc”,首先,查詢StringPool中有沒有“abc”這個值,如果不存在,那麼就將其存進去,如果已經存在,那麼就會被s1所調用。
Java代碼
String s1 = “abc”;
String s2 = “abc”;
s1和s2所指向的對象是同一個,以下代碼能夠看出來:
Java代碼
System.out.println(s1 == s2);
會打印出“true”。
如果是下面這個:
Java代碼
String s1 = “abc”;
String s3 = new String(“abc”);
之間的區別就是,s3在創建對象的時候,會檢查StringPool中是否存在“abc”,前面s1已經加進去瞭,所以s3不會在StringPool中創建瞭,會在堆中創建一個String對象,內容為“abc”,並返回給s3。
如果s1沒定義“abc”之前,s3也會先是在StringPool中創建“abc”,然後再在堆中創建一個String對象,所以s1和s3不是一個對象,用Object的equals方法就可以看出來。