例如,我们有最后一个成员变量类型Cat。在构造函数中,我们使用Cat myCat的一个特定实例初始化这个变量。如果我们更改myCat.age字段,它是也会在最终成员变量处发生变化,还是保持与初始化时间相同的值(年龄)?
public class Aclass {
final Cat myCat;
public Aclass(Cat myCat) {
this.myCat = myCat;
}
}发布于 2022-05-08 00:50:06
编写final Cat myCat;意味着在构造函数运行完之后,不能更改哪个Cat对象myCat引用。但是您当然可以调用Cat的方法,比如myCat.setAge(15);,但必须遵守通常的访问规则。因此,Cat对象的字段当然可以更改它们的值。唯一不能改变的是您拥有的是哪个Cat。
发布于 2022-05-08 00:55:40
您不能像cat一样更改cat = newcat值,因为cat是最终的。您可以更改属性,如cat.age(newvalue),因为有一个构造函数。
发布于 2022-05-08 01:40:07
,如果我们更改
myCat.age字段,它是否也会更改final成员变量,还是保持与初始化时间相同的值(age)?
这大概是指这样的代码:
Cat murgatroyd = ...
Aclass ac = new Aclass(murgatroyd);
ac.myCat.age = 21;根据您的问题,Aclass和Cat有一个(非最终的、非私有的)整数字段age。按照您的代码,myCat字段是final。
age值会改变。
将变量声明为final并不会使变量引用常量的对象。final修饰符“冻结”的唯一一件事是保存在变量中的引用值。
myCat中的引用没有改变。
给myCat.age的赋值不是(尝试)分配给myCat变量本身。这个赋值不会更改myCat变量(指向不同的Cat),即使myCat没有被声明为final。这不是外派在爪哇的意思.
https://stackoverflow.com/questions/72157329
复制相似问题