我不确定这是 Java 行为还是流氓 GWT 行为。但就这样吧。
我有一个 2D vector 类,称为 Vector2。在我的程序中,我对由此类实例表示的 2D 粒子进行了一些模拟。我有两个 Vector2 数组,m_x 和 m_oldx,它们是另一个类的成员,具有执行某些处理的函数。该函数的一部分如下,我对其行为感到非常困惑:
Vector2 old = m_x[i];
Vector2 test = new Vector2(9.0f,9.0f);
m_x[i] = test;
// 1: at this point, m_x[i]'s values are 9.0,9.0
m_oldx[i] = old;
// 2: at this point, m_x[i]'s values are 100.0,100.0 - their original values before I assigned test to m_x[i]!
所以基本上,由于我将 old 分配给 m_oldx 数组,m_x[i] 的值被重置为其原始值!它不再等于我之前分配给它的测试变量。
这肯定不对吧?但这就是发生在我身上的事情。我应该再说一遍,我在这里使用 GWT - 即该代码由 Google 编译器编译为 Javascript。这是常规的 java 行为还是 GWT 做错了什么?感谢您的帮助...撕掉我的头发:(
最佳答案
当出现这样的问题时,我的第一个想法是 m_x 和 m_oldx 在某个时刻被设置为彼此相等,因为 Java 按值而不是创建副本将实例传递给变量。例如,如果在任何时候您有:
m_oldx = m_x;
或
m_x = m_oldx;
这会导致这个问题。
关于java - 令人费解的行为(Java 实例、数组和 GWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3104753/