20
2018
12

Java equals() 方法

equals() 方法用于判断 Number 对象与方法的参数进是否相等。

语法

public boolean equals(Object o)

参数

o -- 任何对象。

返回值

如 Number 对象不为 Null,且与方法的参数类型与数值都相等返回 True,否则返回 False。

Double 和 Float 对象还有一些额外的条件,可以参阅 API 手册:JDK 1.6。

实例

public class Test{

    public static void main(String args[]){

        Integer x = 5;

        Integer y = 10;

        Integer z =5;

        Short a = 5;

        System.out.println(x.equals(y));  

        System.out.println(x.equals(z)); 

        System.out.println(x.equals(a));

    }

}

编译以上程序,输出结果为:

false

true

false

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";

内存分析如下图:

原文链接:https://www.qiquanji.com/post/8380.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。