私有静态最终更改的值

时间:2012-07-17 18:31:50

标签: java static

过去几个小时我一直对以下情况感到困惑。我有一个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计算器的实现,因为我过去已经成功地广泛使用它们。

非常感谢任何关于这种奇怪行为原因的想法和想法。

1 个答案:

答案 0 :(得分:3)

你应该向我们展示类中其余的代码 - 我的猜测是分子和分母变量已被标记为static,而它们确实应该是常规实例变量。

无论问题是什么,final字段更改引用的对象的内容没有任何问题 - final修饰符仅确保不能使字段引用另一个对象。对象本身没有受到保护。