-1

在过去的几个小时里,我一直对以下内容感到困惑。我有一个分数类,其中零分数有一个常数,如下所示:

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 计算器的实现,因为我过去曾成功且广泛地使用过它们。

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

4

1 回答 1

3

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

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

于 2012-07-17T18:33:50.780 回答