用equals方法比较两个内容一样的对象返回值是true还是false

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用equals方法比较两个内容一样的对象返回值是true还是false相关的知识,希望对你有一定的参考价值。

java中,
(1)对于字符串变量来说,equal比较的两边对象的内容,所以内容相同返回的是true。
至于你没问到的“==”,比较的是内存中的首地址,所以如果不是同一个对象,“==”不会返回true 而是false。
举个简单的例子,
String s1="abc", s2="abc";
String s3 =new String("abc");
String s4=new String("abc");
s1==s2 //true,
s1.equals(s2) //true,
s3.equals(s3) //true,equal比较的是内容
s3==s4//false,==比较的是首地址,所以是false
(2)对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象,

Sample sa1 = new Sample();
Sample sa2 = new Sample();
sa1.equals(sa2) //false,因为不是同一对象
注意,如果加上
sa1=sa2;
那么
sa1.equals(sa2) //true

针对你问的,如果你说的两个对象是非字符串的,那么参考第2条;否则请参考第一条
参考技术A 如果是Object的equals,它是比较的两个对象的hashCode,所以,只要用了new,那么就是false。如果重写了equals来比较内容,比如String,就是true

==与equals的区别

==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 .

==比较的是引用而equals方法比较的是内容。public boolean equals(Object obj) 这个方法是由Object对象提供的,可以由子类进行重写。默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。String, BitSet, Date, 和File都对equals方法进行了重写,对两个String对象 而言,值相等意味着它们包含同样的字符序列。对于基本类型的包装类来说,值相等意味着对应的基本类型的值一样。

public class EqualsTest {
               public static void main(String[] args) {
                               String s1 = “abc”;
                               String s2 = s1;
                               String s3 = new String(”abc”);
                               String s4 = new String(”abc”);
                               String s5 = “abc”;
                               System.out.println(”== comparison : ” + (s1 == s5));
                               System.out.println(”== comparison : ” + (s1 == s2));
                               System.out.println(”Using equals method : ” + s1.equals(s2));
                               System.out.println(”== comparison : ” + s3 == s4);
                               System.out.println(”Using equals method : ” + s3.equals(s4));
               }
}
== comparison : true
== comparison : true
Using equals method : true
false
Using equals method :true

 

以上是关于用equals方法比较两个内容一样的对象返回值是true还是false的主要内容,如果未能解决你的问题,请参考以下文章

==与equals的区别

“==”与equals的区别

JAVA比较两个字符串是不是相等用啥

== 区别 equals

Java中怎么比较两个字符串是不是相等?

两个对象整体内容的比较-重写对象的equals方法