Java 的 String 对象是不可修改的吗,为什么?

常规的角度来说,Java 里的 String 对象确实是不可修改的。对于理由,常规回答可能是:因为 final 关键字限制了对对象的修改。不对对于这个答复我觉得既不是完全准确,也没有回答到核心点。

如下这段代码就可以实现对 String 对象的修改。

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
var s = "sc";
var aClass = s.getClass();
var value = aClass.getDeclaredField("value");
value.setAccessible(true);
value.set(s, "cs".getBytes());
System.err.println(s);
}

只是针对 final 的限制来回答是否可以修改,就留于表面了。

我对于这个问题的回答是:从常规的角度来说,String 对象确实不可修改。其原因是 String 类并没暴露出其底层的数据结构,所以我们无法直接修改数据来实现修改对象的效果。我们调用 String 对象的方法时,该类的实现者控制了每次都返回新的对象。

实现者采用了函数式编程的思想实现了 String 类的部分方法。这里体现了函数式编程的重要特征:”函数式编程对程序中的赋值进行了限制和规范。”

SegmentFault博客
我还没有学会写个人说明!
上一篇

数学好=编程能力强?MIT新发现:二者激活大脑区域并不同

下一篇

Go语言(GO lang)连接Oracle Database使用godror

你也可能喜欢

评论已经被关闭。

插入图片