首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最终成员变量的字段是否在改变值?

最终成员变量的字段是否在改变值?
EN

Stack Overflow用户
提问于 2022-05-08 00:45:08
回答 3查看 104关注 0票数 0

例如,我们有最后一个成员变量类型Cat。在构造函数中,我们使用Cat myCat的一个特定实例初始化这个变量。如果我们更改myCat.age字段,它是也会在最终成员变量处发生变化,还是保持与初始化时间相同的值(年龄)?

代码语言:javascript
复制
public class Aclass {
    final Cat myCat;
    
    public Aclass(Cat myCat) {
        this.myCat = myCat;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2022-05-08 00:50:06

编写final Cat myCat;意味着在构造函数运行完之后,不能更改哪个Cat对象myCat引用。但是您当然可以调用Cat的方法,比如myCat.setAge(15);,但必须遵守通常的访问规则。因此,Cat对象的字段当然可以更改它们的值。唯一不能改变的是您拥有的是哪个Cat

票数 3
EN

Stack Overflow用户

发布于 2022-05-08 00:55:40

您不能像cat一样更改cat = newcat值,因为cat是最终的。您可以更改属性,如cat.age(newvalue),因为有一个构造函数。

票数 1
EN

Stack Overflow用户

发布于 2022-05-08 01:40:07

,如果我们更改myCat.age字段,它是否也会更改final成员变量,还是保持与初始化时间相同的值(age)?

这大概是指这样的代码:

代码语言:javascript
复制
   Cat murgatroyd = ...
   Aclass ac = new Aclass(murgatroyd);
   ac.myCat.age = 21;

根据您的问题,AclassCat有一个(非最终的、非私有的)整数字段age。按照您的代码,myCat字段是final

age值会改变。

将变量声明为final并不会使变量引用常量的对象。final修饰符“冻结”的唯一一件事是保存在变量中的引用值。

myCat中的引用没有改变。

myCat.age的赋值不是(尝试)分配给myCat变量本身。这个赋值不会更改myCat变量(指向不同的Cat),即使myCat没有被声明为final。这不是外派在爪哇的意思.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72157329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档