zoukankan      html  css  js  c++  java
  • Java Object类的equals()方法

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

    wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

  • 相关阅读:
    百度地图API地理位置和坐标转换
    解决Myeclipse中导入自定义的配色方案后,JSP中的js代码块为白色背景的问题
    Windows 平台下Myeclipse 10 中SVN 插件使用教程(TortoiseSVN)
    Java代码通过API操作HBase的最佳实践
    HBase中多Filter查询示例
    使用Ant编译和构建项目指南
    如何在Google Play商店发布多个版本apk
    Android 设备管理API概览(Device Administration API)
    Android呼叫管理服务之会话发起协议(SIP)API
    Android基础知识之String类使用详解
  • 原文地址:https://www.cnblogs.com/naihuangbao/p/9445027.html
Copyright © 2011-2022 走看看