JAVA基础 - equals 和 == 的区别

1 ,基本数据类型 和 基本数据类型 比较

基本数据类型存储在栈中,所以使用 == 比较的都是栈中值,结果相同。

        //字符串存储在常量池,常量池在方法区中
        String AA = "森!!仔";
        String BB = "森!!仔";
        int q = 5,w = 5;
        if (AA == BB) {
            System.out.println(AA == BB);            //true
            System.out.println(q == w);              //true
        }
        System.out.println(AA.equals(BB));           //true
        //TODO equals 不能比较基本数据类型

2,基本数据类型 和 引用数据类型 比较

引用数据类型的值存储在堆中,栈中存放的是引用数据类型的地址值。

使用== 进行字符串比较时,比较结果始终是false;

使用 equals 进行字符串比较时,重写方法后,通过引用数据类型的地址值获取堆中的值与基本数据类型比较,结果为true。

8大类型 == 和 equals 比较前会进行自动拆装箱,统一数据类型后比较。

        String z = "森!!仔";
        String s = new String();
        s = "森!!仔";  //TODO 这里不一样哦   s   相当于   String s = "森!!仔";
        String h = new String("森!!仔");  //new后的对象存储在堆
        int f = 5;
        Integer ff = 5;
        System.out.println(h == z);          //false
        System.out.println(s == z);          //true
        System.out.println(h == s);          //false

        System.out.println(h.equals(z));     //true
        System.out.println(h.equals(s));     //true

        System.out.println((f == ff) + "  int和Integer == 比较");  //自动拆装箱  //true
        System.out.println(ff.equals(f)+" int和Integer equals 比较");           //true

3,引用数据类型 和 引用数据类型 比较

使用 == 比较时字符串时 ,两个引用数据类型内容相同,对象不是同一个,则地址值不同,比结果为false;同一个对象在两个地方引用,地址值相同,比较结果为true;

使用 重写 后的equals比较字符串时,获取两引用数据类型的内容进行比较,结果为true。

        String a = new String("森!!仔");
        String b = new String("森!!仔");
        String c = a,d = a;
        Integer o = 5,t = 5;
        System.out.println(d == c);  //引用的是同一地址值   //true
        System.out.println(a == b);                        //false
        System.out.println(a.equals(b));                   //true
        System.out.println(o == t);                        //true
        System.out.println(o.equals(t));                   //true

提示,使用 equlas 比较   null 和 “ ”   会出现 空指针 异 常

        String aa = null;
        String bb = "";
        System.out.println(aa == bb);                      //false
        try {
            System.out.println(aa.equals(bb));             //报错
        }catch (Exception e) { 
            e.printStackTrace();
            if(aa == null && aa.equals("")){               //报错
                System.out.println("通常判断数据是否为 “” 或 null 可以这样");
            }
        }

人无完人,接受指点与反驳,森!!仔

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值