【Java】中String中equals和==的区别

  简单来说

  1.==是比较两个对象所对应的地址是否相等,

  2.equals是比较两个String的表达式是否相等

    public static void main(String[] args) {
        String a = new String("abc");
        String b = new String("abc");
        System.out.println("a==b?" + (a==b)  + "     a.equals(b)?" + (a.equals(b)));
    }

在这里插入图片描述
  首先,要明白当我们new了一个对象的时候,就一定会在堆里面给他分配一个地址,这里就需要复习一下JVM中的内存分配了,不太清楚的可以看看这篇文章,所以上面a,b两个对象,在堆中的地址肯定是不同的,==就是false,但是因为他们的表达式都是"abc",所以equals是true。

  然后我们再看一个例子

    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        System.out.println("a==b?" + (a==b)  + "     a.equals(b)?" + (a.equals(b)));
    }

在这里插入图片描述

  这里结果就跟上面的不一样了,这个就更得复习一下JVM内存的一些知识了,因为String没有new对象,所以属于常量,在分配内存的时候会被放入常量池,而在常量池中,根据String的表达式"abc"查找,如果有相同的表达式,那么这个String会直接指向之前就存在的"abc"的引用地址,所以==的时候地址也是相同的,如果没有"abc"这个常量,那么就会重新分配地址,那么这个时候两个表达式就都是false了,如下

    public static void main(String[] args) {
        String a = "abc";
        String b = "abcd";
        System.out.println("a==b?" + (a==b)  + "     a.equals(b)?" + (a.equals(b)));
    }

在这里插入图片描述

  所以综上,如果String不是new的对象的话,只是直接的基础数据类型,那么==和equals都可以用,但是如果是对象的话就要根据需求去选择了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值