为什么字符串字符串是不变的

  介绍

这篇文章主要介绍为什么字符串字符串是不变的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在猫眼的面试中被面试官问到为什么字符串的字符串是不变的。当时我的回答是因为字符串类是用最后的关键字修饰的,当被问到为什么用最后修饰就是不可变的时候我发现自己说的并没有什么道理。之后自己专门查了一下为什么。

字符串的不变性,如下图所示,当你改变了年代的之后年代指向了一个新的对象原对象不做改变。

为什么字符串字符串是不变的

看一下源码是怎么实现的:

为什么字符串字符串是不变的

我们看到字符串被定义为决赛,所以说字符串是不可继承的,接着我们看到字符串的内部实现是一个字符数组,并且定义为决赛。这时有些人可能认为最终修饰的字段创建以后就不可改变,所以就完的了,但其实不是这样的。

因为虽然价值是不可变,也只是价值这个引用地址不可变。但其引用的数组数组是可变的。

最终int[]值=https://www.yisu.com/zixun/{1,2,3};   值[2]=100;//这时候数组里已经是{2100}

所以根本上的字符串是不可变的原因是太阳工程师很好的封装了价值数组,在其中所有的方法中不去更改值数组,并把它定义为私有的,并且把整个字符串设成最终禁止继承,避免被其他人继承后破坏。所以字符串的不可变性的关键并不是最后的作用。

同时Java编写者为了避免因为字符串的不可变性导致占用大量空间,为此设计了字符串常量池

字符串alt="为什么字符串字符串是不变的">

以上是为什么字符串字符串是不变的的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

为什么字符串字符串是不变的