我在用Java写东西,最近又遇到了一些问题。简而言之,我需要将我创建的对象与之前实例化的该类的另一个实例进行比较,并使用不同的数据。

看起来像这样:

a newA = null;
a oldA = null;

while(someBreakCondition) {
    newA = new a();

    newA.x = getSomeValue();

    // now i want to compare the two objects
    if(oldA != null) {
        if(newA.time != oldA.time) {
            // ...
        }
    }

    // now my newA gets to be my oldA, since in the next iteration, a new newA is created
    oldA = newA;
}


与类A:

class a {
    public long time;
    public int x;

    public a() {
        time = System.currentTimeMillis;
    }
}


问题是,我最终发现newA的值始终等于oldA的值。所以我想某事在循环的最后一行传递对象的引用时出错了...
我以为Java总是传递对象的引用,除非调用了显式的copy()?

如果这很重要:这段代码正在android上运行-不知道dalvik vm是否被此困扰...

最佳答案

我想您可能确实有两个不同的对象,但是它们对time的值都相同。除非您的内部循环长时间运行,否则当前的毫秒数并没有足够的精度来区分快速连续构造的两个对象。即使是Mhz处理器,其迭代次数也将以微秒为单位,而不是毫秒。

10-05 22:48