×

equals方法比较的是什么

equals方法比较的是什么(equals 的用法)

admin admin 发表于2023-10-10 23:18:59 浏览42 评论0

抢沙发发表评论

本文目录

equals 的用法

equals 方法是 java.lang.Object 类的方法。有两种用法说明:(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。比如:String s1,s2,s3 = “abc“, s4 =“abc“ ;s1 = new String(“abc“);s2 = new String(“abc“); 那么:s1==s2 是 false //两个变量的内存地址不一样,说明指向的对象不 一样,故不相等。s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。 注意(1):如果: StringBuffer s1 = new StringBuffer(“a“); StringBuffer s2 = new StringBuffer(“a“); 结果: s1.equals(s2) //是false解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false.注意(2):对于s3和s4来说,由于s3和s4是两个字符串常量所生成的变量,其中所存放的内存地址是相等的,所以s3==s4是true(即使没有s3=s4这样一个赋值语句)。

equals方法比较的是两个对象的哈希码,这么说对吗

没有绝对的对错,如果你重装equals方法,让他去比较两个对象的哈希码来决定两个对象是否相同的话,那这么说就是对的了。否则的话是不能这么说的。equals在原则上要和hashcode保持一致,即equals为真 两个对象hashcode应相同。 你之所以产生这个想法我想估计就这这样造成的。两个方法结果的一致性让你误以为是equals比较的是hashcode。而在程序中真正的hashcode是和内存地址有关的,所以你可以想象每个对象的hashcode是不可能相同的,两个不一样的对象不能同时在一个内存地址上,这个肯定确保了不同对象的hashcod不同。但是在实际运行中我们判断对象是否相同不需要那么严格,两个字符串内容一样我们就认为是相等了,而不去看他是不是在同一个内存地址上,所以这个时候我们就要重新写这个equals来达到当内容相同就返回true了,而不去管内存地址是不是一样了。。但是在很多map这类容器中判断对象是否相等则是同时比较equals和hashcode,所以为了保证这些重载过equals方法的类还能在这种情况下正常使用就规定了重载equals就一定要重载hashcode。这个也是为什么要求equals和hashcode一致性的原因。

java Object里的equals比较的是对象的哈希值还是物理内存 “==“ 比较的又什么

== 和 Equals 的区别  1. == 是一个运算符。  2.Equals则是string对象的方法,可以.(点)出来。    我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较  1、基本数据类型比较  ==和Equals都比较两个值是否相等。相等为true 否则为false;    2、引用对象比较  ==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;    需注意几点:  1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;  2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。  所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;  3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;

java里的.equal方法到底是如何比较的

Object的equals就是 == 必须两个引用的内存地址相同才返回true 其实比的是hashcode值比如String本身重写了equals方法 按位进行char类型的比较你可以重写equals和hashcode方法 实现你想要的对象比如一个人的学号相同 equals方法就返回true什么的

java中equals()方法是怎么进行比较的

因为你自己定义的Value类调用的equals是Object类的,此时的equals就相当于“==”;而Integer的equals是重写了Object的equals,此时比较的是2个Integer对象的值。。。如果你不重写equals,它比较的就是内存中的地址,也就是引用是否指向的是同一个对象。。。如果有问题,请追问。。希望可以帮助你,谢谢采纳。。。

java equals比较的是内容还是地址

equals是object类的方法,所有没有重写这个方法的类中的这个方法比较的都是地址,也就是和’==’是一样的,重写过这个方法的类就按照重写的方法来比较,比如String类就重写了这个方法,比较的是内容

个对象的比较 equals()方法和==号的区别

1. == 号和equals()方法都是比较是否相等的方法2. ==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10;int y = 10;String str1 = new String(“abc“);String str2 = new String(“abc“);System.out.println(x == y); // 输出trueSystem.out.println(str1 == str2); // 输出false3. equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值