Nic*_*ner 3 java clone equality
也许我不明白它是如何clone()运作的.返回值不应该等于调用者吗?
int[] nums = new int[] {0, 1, 2};
int[] list = nums.clone();
nums.equals(list); //returns false. Why?
for (int ket = 0; ket < list.length; ket++) {
System.out.println(list[ket] == nums[ket]); //prints out true every time
}
list == nums //false
Run Code Online (Sandbox Code Playgroud)
Osc*_*Ryz 11
因为数组的equals实现与Object相同
public boolean equals( Object o ) {
return this == o;
}
Run Code Online (Sandbox Code Playgroud)
这也是这个问题
在你测试的两种情况下,这都是错误的.原始和副本的参考值是两个不同的对象(具有相同的值但仍然是不同的对象引用).
clone方法的作用是创建给定对象的副本.创建新对象时,其引用与原始对象不同.这就是原因equals并且==产生错误.
如果你想测试两个数组相等,那么在这里做mmyers:Arrays.equals():
奥斯卡雷耶斯有正确的答案.我只是补充说,Arrays.equals()这正是你正在寻找的那种平等比较.
int[] nums = new int[] {0, 1, 2};
int[] list = nums.clone();
System.out.println(Arrays.equals(nums, list)); // prints "true"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5093 次 |
| 最近记录: |