不是用new String()创建的,都在常量池里吗?
来源:2-14 字符串的不可变性
梦一
2017-07-19 21:38:31
String s1=new String("imooc");
s1="hello,"+s1;//在堆里还是在常量池里?
System.out.println("s1="+s1);如上面代码,后来加的这个hello,S1指向了常量池里的hello,imooc吗?
另下一题的concat也是在常量池里创建了新的数据?
这就是String的不可变性吧
1回答
如上面代码,后来加的这个hello,S1是指向了常量池里的“hello,imooc”,因为s1="hello,"+s1;
2-9 选择题中的str1.concat(str2),是指将str2的字符串连接到str1字符串的结尾。根据String的不可变性,concat也是在常量池里创建了新的数据。System.out.println()语句只是将此新数据输出。由于没有赋值语句,所以没有任何对象指向这个新数据,它其实成了一个垃圾。
相似问题