gpt4 book ai didi

java - 使实例变量静态

转载 作者:行者123 更新时间:2023-12-01 07:34:44 25 4
gpt4 key购买 nike

我遇到了这样一个关于将实例变量静态化的Java问题:

public class Student {
private static String name;

public Student(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

和测试:

public void testBadStatic() {
Student studentA = new Student("a");
assertEquals("a", studentA.getName());
Student studentB = new Student("b");
assertEquals("b", studentB.getName());
assertEquals("a", studentA.getName());

我认为第二个assertEquals会失败,因为name变量是静态的,所以它已经被分配了“a”。但是,第二个断言的正确输出应该为 true,而最后一个断言的正确输出应该为 false。有人可以帮助我理解这一点吗?

谢谢。

最佳答案

我认为您对 finalstatic 变量感到困惑。

最终(但不是静态)变量与实例绑定(bind),可以在构造函数中或通过静态初始化获取值。

静态变量与类相关联,因此它们在一个 JVM 实例中为给定类的所有实例共享相同的值。

最终静态变量提供了两者中最受限制的:它是有效的常量:无法更改,并且对于给定类的所有实例都是相同的。

结论:

this.name = name;

语句更新一个值,该值与类相关,而不是与单个实例相关,因此在这样的调用之后,每个实例将“看到”相同的值 - 最后一个赋值操作的结果。

关于java - 使实例变量静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13605778/

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