首页
技术
登录
6mi
u
盘
搜
搜 索
技术
字符串拼接
字符串拼接
技术
2022-07-13
63
String s1
=
"abc"
;
String s2
=
new
String
(
"abc"
)
;
//System.out.println(s1 == s2);
//s2在堆中
//在JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中;
//在JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了。
String s3
=
"你好吗"
;
String s4
=
"你"
;
String s5
=
"好吗"
;
//System.out.println(s3 == (s4 + s5));//false
//字符串变量相加底层调用StringBuilder的apped方法的进行拼接的,所以s4+s5最终会形成一个StringBuilder对象
//s3在字符串常量池中,所以拿常量池中的字符串地址和堆中的StringBuilder的地址比较结果为false
//System.out.println(s3 == ("你" + "好吗"));//true
//双引号的字符串相加,结果是存储在字符串常量池中的,s3的数据也在字符串常量池中,两个数据内容相同就会采用同一份儿
//小括号的("你" + "好吗")不会产生新的字符串,而会采用s3的数据,所以结果为true
转载请注明原文地址:https://ipadbbs.8miu.com/read-24263.html
最新回复
(
0
)