String的不可变性

两组基本概念

1、对象本身和对象的引用——对象本身即为字面意思;对象的引用是对象的储存地址

2、String常量和String引用变量



String类中每一个看起来会修改String对象的操作,实际上都是创建了一个全新的String对象,从而包含字符串的修改内容,而原来的String对象纹丝不动




简单的理解String的不变性

String s = "abcd";
String s2 = s;
s2=s 传递的是String对象的引用,即对象地址的copy

如果String对象是可改变的,那么下面代码中的s2,s3,s4将置于何地,该何去何从

		String s = "abcd";
		String s2 = s;
		String s3 = s;
		String s4 = s;
		s = s.substring(1);

		System.out.println(s);
		System.out.println(s2);
		System.out.println(s3);
		System.out.println(s4);

输出

    bcd
   abcd
   abcd
   abcd


String的相等问题(==比较的是对象引用的地址,如果引用于同一个地址,则为true。equals比较的两者的内容,内容一样,则为true)

		String s1 = new String("abcd");
		String s2 = new String("abcd");
		String s3 = "abcd";
		String s4 = "abcd";
		
		System.out.println(s1==s2);
		System.out.println(s3==s4);
		System.out.println(s1==s3);
		System.out.println(s1.equals(s3));
		

输出

           false
           true
           false
           true

第一条输出:new出的是两个对象,自然对象的引用不相等

第二条输出:String常量在编译时都储存在常量池中,对它进行自动创建对象,如果两个常量内容一样,就只创建一个对象

第三条输出:s1是new出来的对象引用,s3 是在编译时从常量池中在创建的对象引用,两者是不同的引用


总结:String的不可变与Stringbuffer和Stringbuilder的可变都是指对象本身,String StringBuffer Stringbuilder 内部都是基于char数组实现的,所以本质是对象本身的char数组的可变与不可变,而不是对象的引用是否可变



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值