惯例的角度来说,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 类的局部办法。这里体现了函数式编程的重要特色:"函数式编程对程序中的赋值进行了限度和标准。"