乐趣区

关于java: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 类的局部办法。这里体现了函数式编程的重要特色:” 函数式编程对程序中的赋值进行了限度和标准。”

退出移动版