String類在初始化的時候,會在常量池創建對象,這是之前對String類的概念,當然,這句話不完全正確,實際創建卻要複雜許多。
先看幾道題如下:
String a = "abc";
String test1 = new String("a");
System.out.println(a == test1);
String b = "ab";
String c ="c";
String test2 = b+c;
System.out.println(a == test2);
String test3 = "ab"+"c";
System.out.println(a == test3);
final String d ="ab";
String test4 = d+"c";
System.out.println(a == test4);
輸出結果爲:false ,false ,true,true
解析:
1.String a = “a” 或者String a = “b”+“c”;這種稱爲字符串常量,編譯時可確定,會在常量池中查找或者創建該對象
2.new String(“a”) : 將會在堆中創建該對象,而不是在常量池中創建
3.String a = str + “c” : 因爲存在編譯期不能確定的對象str,所以也是在堆中創建對象,而不是在常量池
4.final String aa = “a”:aa被final修飾之後,它的值在編譯期就能夠被確定,所以直接替換成“a”,而不是一個對象