过去几个小时我一直对以下情况感到困惑。我有一个Fraction类,零分数的常量,如下所示:
class Fraction{
private static final Fraction ZERO = new Fraction(0,1);
public static Fraction zero(){
return ZERO;
}
[etc]
}
随后,我发现ZERO的值在执行过程中发生了变化:
System.out.println(Fraction.zero());
Fraction half = new Fraction(1, 2);
System.out.println(Fraction.zero());
输出:
1/1
1/2
虽然显然产生的值应该是0/1,更重要的是,固定。 问题绝对不在于Fraction类和与之相关的GCD计算器的实现,因为我过去已经成功地广泛使用它们。
非常感谢任何关于这种奇怪行为原因的想法和想法。
答案 0 :(得分:3)
你应该向我们展示类中其余的代码 - 我的猜测是分子和分母变量已被标记为static
,而它们确实应该是常规实例变量。
无论问题是什么,final
字段更改引用的对象的内容没有任何问题 - final
修饰符仅确保不能使字段引用另一个对象。对象本身没有受到保护。