gpt4 book ai didi

java - 字符串和不变性

转载 作者:行者123 更新时间:2023-12-01 16:18:43 25 4
gpt4 key购买 nike

我正在学习防御性复制......

我需要确保下面示例中的实例变量 a 是不可变的。我的类中没有修改器方法,我禁止覆盖我的访问器方法,并且 a 是私有(private)的和最终的。

但是,我不确定当我调用 getA() 时是否需要遵循第一种或第二种方法...

因为字符串是不可变的,我认为是第一,但我真的很感谢澄清,因为不可变性非常重要,我担心如果我弄错了会产生影响!

 private final String a;


final String getA() {

return a;

}

   final String getA() {

return new String(letter);

}

最佳答案

由于字符串是不可变的,因此无需创建它们的防御性副本;除了完全被另一个字符串替换之外,它们不可能被修改。因此第一个版本是正确的。事实上,由于 a 是不可变类的 final 字段,因此 a 完全不可能被任何人修改,因此它只需将其设为 public 而不使用任何访问器即可安全:public final String a

但请注意,完全没有必要将该方法声明为 final:非 final 方法可能会被子类覆盖,如果该方法是调用,但重写与 a 相关的此方法并不会让子类比以前更多地访问 a

关于java - 字符串和不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com