当前位置: 移动技术网 > IT编程>开发语言>Java > Java Object类的equals()方法

Java Object类的equals()方法

2018年08月26日  | 移动技术网IT编程  | 我要评论

所有类都从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";

 

内存分析如下图:

 

很容易看出system.out.println(s1==s2)的结果为true。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网