关于String对象不可改变的解释

关于String对象不可改变的解释

 
最开始学String类这个相关知识点的时候,大家都听说过,String对象所指向的字符串内容不能改变

注意,这让人迷惑的地方,,,啥,,,内容不可以改变,,,,

然后我写了

 

public class G {
    public static void main(String[] args) {
        String str1 = "xiaoMing";
        String str2 = str1;
        System.out.println(str1);
        System.out.println(str2);
        System.out.println("------改变str11、str22----------");
        String str11 = "zhsangSan";
        String str22 = str1;
        str22 = "laOFuZi";
        str11 = "KKKK";
        System.out.println(str11);
        System.out.println(str22);
    }
}

 
 

xiaoMing
xiaoMing
------改变str11、str22----------
KKKK
laOFuZi

Process finished with exit code 0

 

说好的内容不可以改变呢,,,咋运行结果与理论不一样
 
 
在这里插入图片描述

 
 

在这里插入图片描述

 
 
所以:

一个String对象在 堆内存 中创建以后, 就不能被改变了.

其实String对象的所有方法都不会改变其本身,而是会返回一个新的String对象.(比如字符串的concat方法做为连接方法使用,使用后它返回的是一个新的String对象)
需要可改变的字符串,则需要使用 StringBuffer 或者 StringBuilder.

否则每次创建一个新String对象的话,就会造成大量的内存浪费,需要耗时来执行垃圾回收。这里的zhsanSan就需要靠垃圾回收机制来回收了

 

public class G {
    public static void main(String[] args) {
       StringBuffer str1 = new StringBuffer("abc");
       StringBuffer str2 = str1;
       str2.append("changed");
        System.out.println(str1);
        System.out.println(str2);
    }
}

 
 

abcchanged
abcchanged

Process finished with exit code 0

 
执行str1 = str2时候,str1与str2指向同一字符串,即内存中同一个位置,所以当改变str2时候str1也会发生改变

所以StringBuffer对象遵循对象的引用规则,其内容是可变的,String对象的内容是不可变的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值