方式一:String a = “aaa” ;
方式二:String b = new String(“aaa”);
- 兩種方式都能創建字符串對象,但方式一要比方式二更優。
- 因為字符串是保存在常量池中的,而通過new創建的對象會存放在堆內存中。
常量池中已經有字符串常量”aaa”
- 通過方式一創建對象,程序運行時會在常量池中查找”aaa”字符串,將找到的”aaa”字符串的地址賦給a。
- 通過方式二創建對象,無論常量池中有沒有”aaa”字符串,程序都會在堆內存中開辟一片新空間存放新對象。
常量池中沒有字符串常量”aaa”
- 通過方式一創建對象,程序運行時會將”aaa”字符串放進常量池,再將其地址賦給a。
- 通過方式二創建對象,程序會在堆內存中開辟一片新空間存放新對象,同時會將”aaa”字符串放入常量池,相當於創建了兩個對象。