加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java Object类的equals()技巧

发布时间:2021-11-12 16:05:06 所属栏目:教程 来源:互联网
导读:所有类都从Object类中继承了equals方法,Object类中equals方法源代码如下: public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是
所有类都从Object类中继承了equals方法,Object类中equals方法源代码如下:
 
public boolean equals(Object obj)
  {
      return this == obj;
  }
 
Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false,注意:即便是内容完全相等的两块不同的内存对象,也返回false。
 
那么equals()方法与之前的“==”有什么区别呢?
 
在进行演示代码之前先来了解一下Java内存的主要划分,可以帮助我们更好地理解下面的实例演示。
 
 
 
 
 
Java虚拟机里的堆区要存放new出来的对象,栈区存放局部变量,而方法区包含了类的所有信息,包括所有的方法,静态变量,常量等。
 
通过以下实例我们来加深一下equals与,代码如下:
 
public class Equals{
public static void main(String[] args){
String s1="apple";
String s2="apple";
System.out.println(s1==s2);    //true
System.out.println(s1.equals(s2));    //equals比较的是内容,true
String s3=new String("apple");
String s4=new String("apple");
System.out.println(s3==s4);  //false
System.out.println(s3.equals(s4));  //true
}
}
 
从上面的实例可以看出,“==”比较的是两个引用的对象是否相等,而equals()方法比较的是两个对象的实际内容。我们结合上面的内存的划分来理解这个区别。
 
String str1=new String("apple");
String str2=new String("apple");
System.out.println(s3==s4);  //false
System.out.println(s3.equals(s4));  //true
 
上述几行代码内存分析如下图所示:
 
 
 
因为“==”比较的是两个引用的对象是否相等,从上图很容易看出来不等,所以System.out.println(s3==s4),结果为False;而equals()方法比较的是两个对象的实际内容,从图中可以看出s3和s4都指向apple,内容是相同的,所以System.out.println(s3.equals(s4)),结果为True。
 
再来看
 
String s1="apple";
String s2="apple";

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读