java 面试基础 String str2=new String("ABC") +"ABC"; 以及 String str2=new String("ABC") +"ABC" 会创建几个对象
(1)String str1=new String("A"+"B") ; 会创建几个对象 ?
-
"A"在字符串常量池创建,这是第一个对象
-
"B"在字符串常量池创建,这是第二个对象
-
“A”+"B"组合"AB"在字符串常量池创建,这是第三个对象
-
new String(),在堆中分配内存,里面存着这字符串"AB"在字符串常量池中的地址,这是第四个对象
-
str 存储在栈中,里面存储着指向堆中new String()的地址
如果以 String str1=“ab"这种方式创建字符串,则只产生一个对象,即字符串常量池中的"ab”,栈中的str中存储着直接指向字符串常量池中的"ab"的地址值。
如果以String str2=“a”+“b”;这种方式创建字符串,同样是只产生一个对象,java在编译时会将a,b,c自动转换成abc,而不会经过拼接的过程,也就是说str1=str2
(2)String str2=new String("ABC") +"ABC"; 会创建几个对象?
-
ABC在字符常量池中创建,这是一个对象(两个"ABC"都是指向同一个字符串常量池中的一个,因为java虚拟机如果发现常量池中已经存在需要创建的字符串中,它就不会重复创建,而是指向那个字符串)
- new String() ,在堆中分配内存,在里边存着这个"ABC"在字符串常量中的地址 这是第二个
- "ABC" + "ABC" 组合"ABCABC" 在字符串常量池创建,这是第三个
浙公网安备 33010602011771号