java中的String

  1.   我们都知道String类型的变量一经赋值不可改变。(我的理解是:值可以重新赋,但是地址已经改了,重新开辟一块空间,原先空间的值还在那没有改。)
  2. 字符串相加的特点
    • 字符串如果是变量相加,先开辟空间,在拼接。
    • 字符串如果是常量相加,是先相加,然后在常量池找,如果有就直接用,没有,再创建。

 那么请看下面一段代码,我提出一个问题

public class StringDemo {
	public static void main(String[] args) {
		String s1 = "Theshy";
		String s2 = "Theshy";
		String s3 = "Rookie";
		String s4 = s1 + s3;
		String s5 = "Theshy" + "Rookie";
		String s6 = "TheshyRookie";
		System.out.println(s1 == s2);//true
		System.out.println(s4 == s5);//false
		System.out.println(s4 == s6);//false
		System.out.println(s5 == s6);//true
	}
}

"Theshy"在常量中已经有了,所以s2直接用,所以不需要另外在开辟空间,对应结果也是s1和s2的地址值相同

而s4是字符串变量相加所以先在常量池中开辟了空间,然后再相加,这个过程完成后,常量池中已经有“TheshyRookie”了,为什么s5,s6不直接拿s4创建好的地址呢?s6可以直接拿s5的地址用。

对于上述问题,搜寻了大量文章,没有找到想要的结果。发出来欢迎大家讨论,欢迎大佬指点

老师给出的理解是,可能在内存运行中的顺序不知,所以关于s4和s5的地址谁先在常量池中出来不一定,所以s5不能用s4的地址。

我的理解是凡是涉及到变量的相加,他的地址都不能其他共享。所以s2能共享s1的地址,而s5,s6不能共享s4的地址。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值