chapter10 equals()方法介绍

在这里插入图片描述

Object中的equals方法代码如下:

public boolean equals(Object obj) {
        return (this == obj);//判断这两个对象是否是同一个对象的指引,如果是,就会返回true,否则返回false
    }

在String等包装类的equals方法中,经过了重写中,比较的是两个对象的内容是否相同,
注意在重写的时候,必须要发生向下转型,否则没有办法访问到当前这个对象的内容,从而没有办法进行判断两个对象的内容是否相同,代码如下:

public boolean equals(Object anObject) {//Object anObject = new String();向上转型,只能访问到父类中的成员,但是没有办法访问到子类特有成员
        if (this == anObject) {
//如果anObject和当前的对象是同一个对象的指引(即他们的地址是相同的),那么就返回true
            return true;
        }
//如果他们的地址不同,那么就判断anObject是否为String的实例,如果是,那么就判断他们的内容是否相同
        if (anObject instanceof String) {
  /**
   * 如果是String的实例,那么就向下转型,才可以判断他们的内容是否相同,如
   * 果不向下转型,那么原来的anObject是String对象经过向上转型得来的,那么
   * anObject是没有办法访问到String子类对象特有成员,从而报错。
   * /
            String anotherString = (String)anObject;//经过向下转型之后,才可以比较两个对象的内容是否相同
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;//如果anObject不是当前String类的实例,那么就返回false,说明它的类型不是String
    }

实例代码:

public class StringEquals {
    public static void main(String[] args){
        String s1 = new String("a");
        String s2 = new String("a");
        Integer x = new Integer(5);
        Integer y = new Integer(5);
        String s3 = s1;//当s1赋给s3的时候,那么s3指向的是a这个对象,和s1指向的对象是一样的,那么他们的地址一样
        Object s4 = new Object();
        Object s5 = new Object();
        Object s6 = s4;
        //当==比较的是两个引用类型的时候,那么==比较的是这两个引用类型的地址是否相同,如果相同,表明他们是同一个对象的指引,否则不是
        System.out.println(s1 == s2);//输出false,每new一次,那么他们的地址就不一样
        //字符串类型,那么他会重写Object类型的equals方法,从而他会比较两者的内容是否想相同
        System.out.println(s1.equals(s2));//输出true
        System.out.println(s1 == s3);//输出true
        System.out.println(s1.equals(s3));//输出true
        System.out.println(x == y);//输出false
        //整形包装类,那么会重写Object类的equals方法,从而比较的两者的内容是否相同
        System.out.println(x.equals(y));
        System.out.println(s4.equals(s2));//Object.equals(String),比较的是两者的地址,输出false
        System.out.println(s2.equals(s4));//String.equals(Object),,比较的是两者的内容,输出false
        System.out.println(s4 == s5);//比较两个引用类型的地址是否相同
        System.out.println(s4.equals(s5));//Object进行比较,那么equals比较的是两者的地址是否相同
        System.out.println(s4 == s6);//输出true

    }
}

结果:
在这里插入图片描述

综上所述,equals如果比较的两个对象都是Object,那么比较的是两者的地址是否相同,如果是Object.equals(String),那么equals的方法和比较两个对象都是Object的一样,都是比较两者的地址是否相同,是否指向同一个指引。如果String.equals(Object)和比较的两个对象都是String一样,比较的是两者的内容是否相同。

equals和==的区别:
①对于基本类型的变量来说(如 short、 int、 long、 float、 double),只能使用 == ,因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较, 一般比较的是它们的值
②对于引用类型(类、数组、接口)的变量来说,可以使用==来比较他们的地址是否相同,如果使用equals时,默认情况下,也就是没有复写 Object 类的 equals 方法,那么使用 == 和 equals 比较是一样效果的,都是比较的是它们地址是否相同,但是如果重写了equals方法,那么比较的就是它们的内容是否相同
进行字符串的比较时,一般都是用equals来进行比较,而对于基本类型的比较,一般是用==来进行比较的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值