java中==与equals的区别详细介绍

首先介绍一下==号:
①它常用于比较数值类型,不做多解释。
②当它用于比较对象时,它比较的是个对象地址值
③当它比较字符串时,那么重点来了,要注意一下细节:

首先,举个例子:

		String s1= "abc";
        String s2="abc";
        System.out.println(s1==s2);

此时的结果是个true。我来解释一下:

这就涉及到了内存中的常量池,常量池属于方法区的一部分,当运行到s1创建对象时,在编译时期,查看如果常量池中没有这个对象,就在常量池中创建一个对象”abc”,第二次创建"abc",这个对象的时候,也是在编译时期,查看是否存在改对象,很明显,已经存在,这个时候,就会还回改对象的地址,所以s1,s2变量中存放是同一个对象的地址。所以是相等的。能理解吧。

然后,第二个例子来了:

  		String s1= "abc";
        String s3= "a"+"b"+"c";
        System.out.println(s1==s3);

此时的结果也是true。现在是不是又疑惑了。根据第一个例子,按理应该是false。因为常量池存在“abc”的地址值了,但是咱们是 a b c 不应该是创建三个地址值,然后拼接嘛。

然后我查了下资料,了解后,原因是:比较字符串的时候,常量池经过优化,优化后的结果就是,当你拼接 字符串时确定值的时候,它会先给你拼接字符串,然后再去,常量池去匹配有没有相同的地址。有的话跟第一个例子同理。

然后我又测试了一下,不是固定值的时候:

		String s1 = "abc";
		String x = "b";
		String s4= "a"+x+"c";
		System.out.println(s1==s4);

此时的结果是false。
因为x不是确定值,可以改变,所以当不是确定值的是,常量池不会给你拼接之后去匹配,而是直接给你,创建一个新的,所以就是false

再来介绍一下equals:
首先,咱们从源码知道,equals()方法存在于Object类中,然而,源码中底层也是用的==号来实现的。但是通过学习,咱们都知道,java大多数类,都是重写了equals方法。
重写后的equals()方法一般都是比较两个对象的值(可以去看源码)。
如果没有重写equals()方法,那么底层也是通过 (等等号)来实现的。

所以equals方法我也不多做解释了,==号我已经解释的很清楚了。

最后,我自己总结了一下:

当你想去比较相等时:
①如果是数值型使用==号
②当比较字符串是否相等时,需要使用equals

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值