zoukankan      html  css  js  c++  java
  • Object类:equals方法

      Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗。所有的类,不管是谁,都是从它继承下来的。

    1.equals方法

    Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false,注意:即便是内容完全相等的两块不同的内存对象,也返回false。

    在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如下代码演示:

    /*
         描述人这个类,并定义功能根据年龄判断是否是同龄人
         由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
         在方法体中根据类的属性值进行比较
     */
    class Person extends Object{
        int age ;
        //复写父类的equals方法,实现自己的比较方式
        public boolean equals(Object obj) {
            //判断当前调用equals方法的对象和传递进来的对象是否是同一个
            if(this == obj){
                return true;
            }
            //判断传递进来的对象是否是Person类型
            if(!(obj instanceof Person)){
                return false;
            }
            //将obj向下转型为Perosn引用,访问其属性
            Person p = (Person)obj;
            return this.age == p.age;
        }
    }

    注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

    Java内存的主要划分图

    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));  //tru

    上述几行代码内存分析如下图所示

    因为“==”比较的是两个引用的对象是否相等,从上图很容易看出来不等,所以System.out.println(s3==s4),结果为False;而equals()方法比较的是两个对象的实际内容,从图中可以看出s3和s4都指向apple,内容是相同的,所以System.out.println(s3.equals(s4)),结果为True。

    再来看

    String s1="apple";
    String s2="apple";

    内存分析如下图:

  • 相关阅读:
    转载:Cgroups 与 Systemd
    转载:linux cgroups 简介
    深入剖析Linux IO原理
    Tomcat zabbix监控、jmx监控、zabbix_java_gateway
    Tomcat 打开jmx
    vsftp、ftps 搭建
    Tomcat 调优
    Tomcat 部署及配置
    SVN 搭建
    Nginx 编译安装
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/11043624.html
Copyright © 2011-2022 走看看