java中String类与变量相加解释一旦创建了String对象,那它的值就无法改变了

public class str {
	public static void main(String args[]){
		int value=1;
		String str1="ABC"+value;
		String str2="ABC"+1;
		String str3=str1;
		String str4="ABC1";
		String str5="ABC"+value;
		boolean a=(str1==str2);
		boolean b=(str1==str3);
		boolean c=(str1==str4);
		boolean d=(str1==str5);
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
	}
}
结果为什么是false,true,false,false
==是用作比较地址。“那么str1+value的地址就变了吗”:是的,String字符串每进行操作(比如像你进行的拼接“ABC”+ value)都会new一个新对象去保存之前这两对象的内容,新对象肯定会有一个新地址,所以当str1=str1+value时,str1已经指向了别的地址(多说一句原来的“ABC”由于没有了变量指向,这个时候已经是垃圾,等待自动回收)。至于“3和1 却相等”因为String str3=str1,实际上是将str1的地址付给了str3,所以它们指向同一个地址。当要进行很多次字符串拼接时不要用String,应该使用Stringbuffer或Stringbuild(分别是线程安全和非线程安全)。
string st = "ABC"; 和 String st = new String("ABC");虽然两者结果一样,但后者多创建了一次实例。
解释:
第一种,st直接指向“ABC”常量实例中。
当使用String st="ABC",这种方式时,先去内存的Heap中找是否存在"ABC"这个字符串,若存在,则将地址引用。若不存在则创建。
第二种,新建一个String实例化,st指向String实例化(new String("ABC"))
当使用String st=new String("ABC");时,不管事先是否存在"ABC",每次都会创建其新的对象。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值