Java:实现用于比较两个double[]]数组的equals方法

Java:实现用于比较两个double[]]数组的equals方法,java,arrays,object,equals,Java,Arrays,Object,Equals,我正在尝试在我的类中实现equals方法。。 注意:“\u data”属性是一个double[][]数组,我正在尝试比较这两个对象 不管怎样,它编译了所有的东西,但我总是得到一个错误的答案,这不可能是因为两个数组都是相同的:o 我做错什么了吗?还有其他简单的方法吗?(仅使用对象类中的相等项!!) 我的代码(JAVA): 使用数组。deepEquals(数据,myObj.\u数据)使用数组。deepEquals(数据,myObj.\u数据)使用 Arrays.deepEquals(this._da

我正在尝试在我的类中实现equals方法。。 注意:“
\u data
”属性是一个
double[][]
数组,我正在尝试比较这两个对象

不管怎样,它编译了所有的东西,但我总是得到一个错误的答案,这不可能是因为两个数组都是相同的:o

我做错什么了吗?还有其他简单的方法吗?(仅使用对象类中的相等项!!)

我的代码(JAVA):


使用
数组。deepEquals(数据,myObj.\u数据)
使用
数组。deepEquals(数据,myObj.\u数据)
使用

Arrays.deepEquals(this._data, myObj._data) 
在阵列上进行测试

使用

Arrays.deepEquals(this._data, myObj._data) 

在阵列上进行测试

你可以看看这篇文章,它描述了
deepEquals
方法:

你可以看看这篇文章,它描述了
deepEquals
方法:

我会覆盖MyClass类中的equals方法

@Override
public boolean equals(Object obj) {//if you insist in using an Object as argument instead of double[][]
   if (!(obj instanceof MyClass)) {
      return false;
   }

   MyClass myObj = (MyClass) obj;
   if(_data.length == myObj._data.length){
      for(int i=0; i<_data.length; i++){
         if(_data[i].length == myObj._data[i].length){
            for(int j=0; j<_data[i].length; j++){
               if(_data[i][j] != myObj._data[i][j]){
                  return false;
               }
            }
         }else{
            return false;
         }
      }
   }else{
      return false;
   }
   return true;
}
@覆盖
公共布尔等于(objectobj){//如果您坚持使用对象作为参数而不是double[][]
如果(!(MyClass的obj实例)){
返回false;
}
MyClass myObj=(MyClass)obj;
如果(_data.length==myObj._data.length){

对于(inti=0;i我将重写MyClass中的equals方法

@Override
public boolean equals(Object obj) {//if you insist in using an Object as argument instead of double[][]
   if (!(obj instanceof MyClass)) {
      return false;
   }

   MyClass myObj = (MyClass) obj;
   if(_data.length == myObj._data.length){
      for(int i=0; i<_data.length; i++){
         if(_data[i].length == myObj._data[i].length){
            for(int j=0; j<_data[i].length; j++){
               if(_data[i][j] != myObj._data[i][j]){
                  return false;
               }
            }
         }else{
            return false;
         }
      }
   }else{
      return false;
   }
   return true;
}
@覆盖
公共布尔等于(objectobj){//如果您坚持使用对象作为参数而不是double[][]
如果(!(MyClass的obj实例)){
返回false;
}
MyClass myObj=(MyClass)obj;
如果(_data.length==myObj._data.length){


for(int i=0;iJoshua Bloch告诉您如何在“有效Java”中实现equals和hashCode(它们必须串联完成)。这应该告诉您为类重写equals所需的所有知识。

Joshua Bloch告诉您如何在“有效Java”中实现equals和hashCode(它们必须串联完成)。这应该告诉您为类重写equals所需的所有知识。

您必须粘贴更大的代码段。现在很难判断是什么导致了问题。您尝试过吗?为了调试目的,请执行类似于
MyClass mc1=new MyClass();MyClass mc2=mc1;boolean-toCheck=mc1.equals(mc2)的操作
toCheck==true吗?托马兹·努尔基维奇-我不能使用你建议的方法,我只要求使用equals方法实现..我确信如果你使用
equals
与使用
==
是一样的,也就是说,只比较它们是否是相同的实例(相同的引用),而不是它们是否有相同的内容。测试:
int[]a={1};int[]b={1};System.out.println(a.equals(b));
你必须粘贴一个更大的代码段。现在很难判断是什么导致了问题。你试过了吗?为了调试的目的,你能做一些类似于
MyClass mc1=new MyClass();MyClass mc2=mc1;boolean-toCheck=mc1.equals(mc2)的事情吗
toCheck==true吗?托马兹·努尔基维奇-我不能使用你建议的方法,我只要求使用equals方法实现..我确信如果你使用
equals
与使用
==
是一样的,也就是说,只比较它们是否是相同的实例(相同的引用),而不是它们是否有相同的内容。测试:
int[]a={1};int[]b={1};System.out.println(a.equals(b));
谢谢,但我只是用equals方法问…(不是array.equals())谢谢,但我只是用equals方法问…(不是array.equals())谢谢,但我只是用equals方法问…(不是array.equals())谢谢。。(不是array.equals())谢谢,但我只是通过使用equals方法问的…(不是array.equals())说真的,当三个人告诉你用标准库中内置的某种方法来做,而你却基于“我不能用那种方法”而反对它时,您需要证明为什么不。如果您不想使用标准库,请在两个维度上进行循环迭代。但这太可怕了。谢谢,但我仅通过使用equals方法来询问…(而不是array.equals())说真的,当三个人告诉你用标准库内置的某种方式来做时,你会因为“我不能用那个”而反对,您需要证明为什么不。如果您不想使用标准库,请在两个维度上进行循环迭代。但这太可怕了。我相信问题不在于实现
equals
,而在于如何比较数组,,,主要是为什么
equals
方法不适用于数组!我以为是关于如何覆盖equals在OP的类中,它可以使用数组数据成员进行比较。这不对吗?“我正在尝试在我的类中实现equals方法…”-至于原因,很明显:equals只在未被重写时执行“浅层equals”。考虑到OP的评论,这对OP来说不太明显“…我很肯定我可以将这些数组与'equals'进行比较…”,但我可能错了。事实上我相信它比'shall equals'要小-他只是在比较引用。这就是我所说的“shall equals”".Deep equals将确保数组的长度相同,所有元素都相同。使用double会更困难;您所能做的最好是说它们彼此都在ε误差范围内。我相信问题不在于实现
equals
,而在于如何比较数组,主要是为什么
equals
满足要求hod不适用于数组!我以为它是关于如何重写OP类中的equals,以便它可以使用数组数据成员进行比较。这不对吗?“我正在尝试在我的类中实现equals方法…”至于原因,很明显:equals只执行“浅层equals”当它没有被覆盖时。对于OP来说不太明显,考虑到他的评论“…我很肯定我可以将这些数组与'equals'…”进行比较,但我可能在这方面错了。事实上我相信