问题描述
我直接写内容;inta[]=newint[4];intb[]=newint[4];a.equals(b);false????第一个不懂为什么是FALSEinta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};a.equals(b);false????还是不懂为什么是FALSE帮帮的谢谢了
解决方案
解决方案二:
equal不是只在String中才用到的吗?
解决方案三:
equals比较的值,a和b又不是一个值怎么比较啊?当然是false
解决方案四:
new出来的东西都是堆里重新创建的,你觉得会是一个东西吗?
解决方案五:
inta[]=newint[4];intb[]=newint[4];初始化一个int数组将引用赋予a,ba.equal(b)实际上比较的a,b数组的引用,也就是比较它们在堆内存的位置inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};道理也是一致的,只是初始化了数组里每个元素的值
解决方案六:
Object中equals方法publicbooleanequals(Objectobj){return(this==obj);}因为a!=b所以false
解决方案七:
引用5楼swandragon的回复:
Object中equals方法publicbooleanequals(Objectobj){return(this==obj);}因为a!=b所以false
正解
解决方案八:
a.equals(b);没有重写过equals()方法的时候,它的含义是比较两个变量是否指向同一个对象的。
解决方案九:
equals除了比较值,还要比较hashCode.
解决方案十:
equals只是比较字符串的值吧
解决方案十一:
又不是同一对象。。当然是false
解决方案十二:
第一个False,比较的也不是原始类型啊,数组是引用类型吧,所以用==比较后是false吧。第二个equals是对字符串的比较啊。
解决方案十三:
学习了
解决方案十四:
指向的内存对象都是不一样的,你new了,重新创建对象了,怎么可能一样!!
解决方案十五:
好像equals是比较字符串的吧
解决方案:
类创建的两个对象是不同的。建议楼主看一下equals()和equalsIgnoreCase()这两个方法的区别
解决方案:
比较了hasCode
解决方案:
在String类中重写了equals方法。而其他类并未对equals方法做任何处理。
解决方案:
第一次看到这么用equals的
解决方案:
inta[]=newint[4];intb[]=newint[4];//a.equals(b);false????第一个不懂为什么是FALSEinta1[]=newint[]{1,2,3,4};intb1[]=newint[]{1,2,3,4};//因为它们都是不同的对象,如果需要进行数组的比较需要用到Arrays.equals()方法System.out.println(Arrays.equals(a,b));System.out.println(Arrays.equals(a1,b1));
解决方案:
inta[]=newint[4];intb[]=newint[4];a.equals(b);false????第一个不懂为什么是FALSE//equals不适用于基本类型,即int,float之类的,你可以用Integer,String等创建对象。inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};a.equals(b);false????还是不懂为什么是FALSE//同上
解决方案:
路过学习。
解决方案:
引用8楼ouyangxiaokang6的回复:
equals除了比较值,还要比较hashCode.
很好,我再加一点首先看hashcode是否相等,如果不相等就是false,否则再看是否是同一个内存对象(这里是没有重写的情况)
解决方案:
源代码中Object的equals方法并没有比较hashcode啊?为什么楼上这么多人说有呢?/***Indicateswhethersomeotherobjectis"equalto"thisone.*<p>*The<code>equals</code>methodimplementsanequivalencerelation*onnon-nullobjectreferences:*<ul>*<li>Itis<i>reflexive</i>:foranynon-nullreferencevalue*<code>x</code>,<code>x.equals(x)</code>shouldreturn*<code>true</code>.*<li>Itis<i>symmetric</i>:foranynon-nullreferencevalues*<code>x</code>and<code>y</code>,<code>x.equals(y)</code>*shouldreturn<code>true</code>ifandonlyif*<code>y.equals(x)</code>returns<code>true</code>.*<li>Itis<i>transitive</i>:foranynon-nullreferencevalues*<code>x</code>,<code>y</code>,and<code>z</code>,if*<code>x.equals(y)</code>returns<code>true</code>and*<code>y.equals(z)</code>returns<code>true</code>,then*<code>x.equals(z)</code>shouldreturn<code>true</code>.*<li>Itis<i>consistent</i>:foranynon-nullreferencevalues*<code>x</code>and<code>y</code>,multipleinvocationsof*<tt>x.equals(y)</tt>consistentlyreturn<code>true</code>*orconsistentlyreturn<code>false</code>,providedno*informationusedin<code>equals</code>comparisonsonthe*objectsismodified.*<li>Foranynon-nullreferencevalue<code>x</code>,*<code>x.equals(null)</code>shouldreturn<code>false</code>.*</ul>*<p>*The<tt>equals</tt>methodforclass<code>Object</code>implements*themostdiscriminatingpossibleequivalencerelationonobjects;*thatis,foranynon-nullreferencevalues<code>x</code>and*<code>y</code>,thismethodreturns<code>true</code>ifandonly*if<code>x</code>and<code>y</code>refertothesameobject*(<code>x==y</code>hasthevalue<code>true</code>).*<p>*Notethatitisgenerallynecessarytooverridethe<tt>hashCode</tt>*methodwheneverthismethodisoverridden,soastomaintainthe*generalcontractforthe<tt>hashCode</tt>method,whichstates*thatequalobjectsmusthaveequalhashcodes.**@paramobjthereferenceobjectwithwhichtocompare.*@return<code>true</code>ifthisobjectisthesameastheobj*argument;<code>false</code>otherwise.*@see#hashCode()*@seejava.util.Hashtable*/publicbooleanequals(Objectobj){return(this==obj);}
解决方案:
数组是引用数据类型,而引用数据类型每new一次就说明是不同对象,而equals比较的是对象的地址,不同对象在堆内存地址不一样,所以结果为false...除非重写equals方法。
解决方案:
1、数组是一个Object对象,所以直接使用数组的equals()方法,普遍符合是使用Object类的equals()方法。2、Object类的equals()方法,实质上还是使用==比较对象。3、JDK中很多类重写了equals()方法,包括java.lang.String类和java.util.Arrays类。4、所以,当你比较两个字符串的时候,它使用的是String类下的equals()方法,这个方法比较的是对象值。5、同样的道理,如果需要比较两个数组的值,就需要使用Arrays类中的equals()方法。6、代码示例:int[]a=newint[]{1,2,3};int[]b=newint[]{1,2,3};System.out.println(Arrays.equals(a,b));
结果返回true。
解决方案:
“普通符合”是“实际上”,打错了
解决方案:
equals在比较数量是比较内存里开辟的地址是不是一样。
解决方案:
你new的这两个数组是个什么对象就不清楚了,但肯定是没有覆盖Object的equals方法的,所以返回值是false,因为Object的equals方法始终返回false.可以看看Object的源代码。。
解决方案:
你调用的equals是基类Object中的,比较的是两个对象的引用,两个不同的对象引用当然不同所以两个比较结果都是false数组的equals不像字符串那样重写过基类的equals,你可以用Arrays.equals(a,b)比较数组的内容
解决方案:
总结大家的回帖:1.Object的equals比较的是对象在内存中的地址,效果同"=="2.String和Arrays类的equals是重写(overridden)过的,比较的是内容,而不是地址
解决方案:
第一个错误在于:inta[]=newint[4];是在内存中连续分配4个int(一个int在java占4个字节)的内存空间,a指该连续空间的首地址。两个地址怎能相等。第二个错误也一样。
解决方案:
所有Java的类的父类Object类里就有equals方法。string类只不过重写了父类里的equals方法。就是STRING类的equals方法比较的是内容,而其他的没有重写的就是比较的应用地址。你的a和b在内存中存放的地址不一样(不管值是否一样),当然就是FALSE了,
解决方案:
应为比较的是两个对象的分配空间而不是不比较空间里的直两个对象的空间不同所以是FALSE如果比较的是里面的值就是true
解决方案:
数组的equals方法比较的是传进方法体里的对象而不是对象的内容a【4】和b【4】虽然初始化后内容一样都为零但他们的地址不一样,也就是他们不是同一个对象所以是false。至于第二个false,你自己赋值和数组初始化赋值效果一样所以原理如上。足以这类比用到了equals或是contains等方法一般不重写方法的话比较的都是对象而不是对象的内容!!!
解决方案:
19楼和25楼说的对这是Object下的equals:booleanequals(Objectobj)指示其他某个对象是否与此对象“相等”。这是Arrays下的equals:staticbooleanequals(boolean[]a,boolean[]a2)如果两个指定的boolean型数组彼此相等,则返回true。staticbooleanequals(byte[]a,byte[]a2)如果两个指定的byte型数组彼此相等,则返回true。staticbooleanequals(char[]a,char[]a2)如果两个指定的char型数组彼此相等,则返回true。staticbooleanequals(double[]a,double[]a2)如果两个指定的double型数组彼此相等,则返回true。staticbooleanequals(float[]a,float[]a2)如果两个指定的float型数组彼此相等,则返回true。staticbooleanequals(int[]a,int[]a2)如果两个指定的int型数组彼此相等,则返回true。staticbooleanequals(long[]a,long[]a2)如果两个指定的long型数组彼此相等,则返回true。staticbooleanequals(Object[]a,Object[]a2)如果两个指定的Objects数组彼此相等,则返回true。staticbooleanequals(short[]a,short[]a2)如果两个指定的short型数组彼此相等,则返回true。是不一样的。
解决方案:
数组中存放的是内存地址吧,因为new了2次所以内存地址不同
解决方案:
inta[]=newint[4];intb[]=newint[4];//a.equals(b);false????第一个不懂为什么是FALSEinta1[]=newint[]{1,2,3,4};intb1[]=newint[]{1,2,3,4};//因为它们都是不同的对象,如果需要进行数组的比较需要用到Arrays.equals()方法System.out.println(Arrays.equals(a,b));System.out.println(Arrays.equals(a1,b1));这个事正确的,因为你用了2个new创建了2个数组a和b,a.equals(b)是指这2个数组的内存地址相同,有点像c中指向同一地址的指针,Arrays.equals(a,b)是指你创建的数组a和b数值是否相等,返回的是Boolean型变量
解决方案:
equals比较的是内存地址,==比较的是值
解决方案:
学习了
解决方案:
String的equals之所以比较的是内容而不是地址是因为重写了这个方法如果没有重写依然比较的是地址
解决方案:
学习了啊
解决方案:
我的理解这个问题很简单的就是比较hashcodepublicclassDemo1{publicstaticvoidmain(String[]args){inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};System.out.println("a.hashCode()"+a.hashCode());System.out.println("b.hashCode()"+b.hashCode());}}
用这段代码自己测试一下就行了hashcode是不一样的!
解决方案:
数组的概念与equals没有什么关联想比较需要,根据自己的需要自己写就重写equals和hashCode方法
解决方案:
基础的东西,JAVA中数组不和字符串一样,它属于基础数据类型,根本就没有方法可以调用,要比较?用循环吧
解决方案:
我得到的value是‘Cannotcallanymethodonarrays.’
解决方案:
#44有道理啊
解决方案:
不懂在说什么.请问可以解释一下吗,这段解释和楼主的问题有联系吗?不好意思。学习中...引用42楼lulu0126的回复:
我的理解这个问题很简单的就是比较hashcodeJavacodepublicclassDemo1{publicstaticvoidmain(String[]args){inta[]=newint[]{1,2,3,4};intb[]=newint[]{1,2,3,4};System.out.println("a.hashCode()"+a.hashCode());System.out.println("b.hashCode()"+b.hashCode());}}用这段代码自己测试一下就行了hashcode是不一样的!
解决方案:
Arrays.equals(byte[]a,byteb);
解决方案:
Arrays.equals(byte[]a,byte[]b);
解决方案:
数组中有个属性,是length,用来求数组长度的,注意是没括号的,字符串的是length(),是方法,不要搞错了,数组不是对象,不可能有方法可以调用