源码之Equals学习

1.基本数据类型的包装类使用equals方法
注意:基本数据类型没有equals方法,判断是否相等使用"=="

//例如
	Integer a = 6;
	Integer  b = 5;
	String f = "5";
	System.out.println(a.equals(b));

equals源码如下

/*当使用a.equals(b)的时候,会默认调取a类型所对应的equals的方法
(a是Integer类型则调用Integer.class下的equals方法,b是Long类型,则会调用Long.class下的equals方法),
然后对b进行判断,先判断b的类型是否和a一样(如果不是则直接返回false),然后在判断a的值与b的之是否相等。
*/
 public boolean equals(Object obj) {
 //判断b的类型是否与a的类型相等
        if (obj instanceof Integer) {
        //在判断两个值是否相等
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

2.引用数据类型使用equals
例子

String c = "ab";
String d = "ab";
//这里创建c的会在常量池中创建,在创建d的时候,则会先从常量池中搜索是否有对应的字段,有的话则直接引用,没有则会创建。
//c和d创建的引用数据类型是常量池的同一个,所以其虚地址也相同,所以可以用"=="来判断是否相等。
System.out.println(c==d); //true

String a = new String ("ac");
String b = new String ("ac");
//这种方式则创建两个具有不同虚地址的"ac"对象,所以不能用"=="来判断是否相等
System.out.println(a==b); //flase
//会重写equals方法
System.out.println(a.equals(b));//true

源码如下:

 public boolean equals(Object anObject) {
 		//先判断其虚地址是否相等,相等直接返回true
        if (this == anObject) {
            return true;
        }
        //判断比较的类型是否是String类型
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            //获取比较字段的长度
            int n = value.length;
            //判断相比较的两个字段长度是否相等
            if (n == anotherString.value.length) {
            //分别把两个字段放到char数组当中
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                //循环两个char类型数组,判断每个字符是否相等
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微笑再加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值