==与equals

==
它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象

  • 基本数据类型+String常量==比较的是值
  • 引用数据类型==比较的是内存地址
    在这里插入图片描述

equals()
它的作用也是判断两个对象是不是相等。但是它一般有两种使用情况:
● 情况1:类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于"=="比较这两个对象。
● 情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法来比较两个对象的内容是否相等。

public class testEquals {
    public static void main(String argu[]){
        String a = new String("ab"); // a 为一个引用
        String b = new String("ab"); // b为另一个引用,对象的内容一样
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 从常量池中查找
        Integer aaa = 127; // 放在常量池中
        Integer bbb = 127; // 从常量池中查找
        Integer aaaa = 128; // 放在常量池中
        Integer bbbb = 128; // 在堆内存中创建一个新的对象
        if (aa == bb){ //true
            System.out.println("aa == bb");
        }
        if (a == b){ //false,非同一对象
            System.out.println("a == b");
        }
        if (a.equals(b)){ //true
            System.out.println("a.equals(b)");
        }
        if (aa.equals(bb)){ //true
            System.out.println("aa.equals(bb)");
        }
        if (aa.equals(b)){ //true
            System.out.println("aa.equals(b)");
        }
        if (a.equals(bb)){ //true
            System.out.println("a.equals(bb)");
        }
        if (42 == 42.0){ //true
            System.out.println("42 == 42.0");
        }
        if (aaa == bbb){ //true
            System.out.println("aaa == bbb");
        }
        if (aaa.equals(bbb)){ //true
            System.out.println("aaa.equals(bbb)");
        }
        if (aaaa == bbbb){ //false,非同一对象
            System.out.println("aaaa==bbbb");
        }
        if (aaaa.equals(bbbb)){ //true
            System.out.println("aaaa.equals(bbbb)");
        }
    }
}

说明
String中的equals()方法是被重写过的,因为object的equals()方法是比较对象的内存地址,而String的equals()方法是比较对象的值;
● 当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同对象,如果有,则就把它赋值给当前引用。如果没有就在常量池中重新创建一个String对象;
● 因为 Integer 在常量池中的存储范围为[-128,127],127在这范围内,因此是直接存储于常量池的,而128不在这范围内,所以会在堆内存中创建一个新的对象来保存这个值,所以aaaa,bbbb分别指向了两个不同的对象地址,故而导致了不相等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值