【Java基础】==的使用方法和详细说明

先看代码

        String a = "a";
        String b = "a";
        System.out.println(a == b);
        System.out.println("---------------------------------");
        System.out.println(a.equals(b));

下面我们公布一下结果

好多朋友都知道下面的运行结果是true,如果不知道请参考我的上一篇文章:

java中的equals方法源码分析说明

下面我们分析一下,为什么a==b的结果也是true

首先需要明白String其实是一个常量类对象,底层代码是final关键字修饰的char数组。 

String a=”a”,这句代码在运行时不会在堆内存新建一个String对象,而是会去常量区寻找是否存在“a”这个常量,如果存在,就把“a”这个常量在方法区的地址赋值给栈中的a;如果不存在,那么就在常量区创建“a”常量,然后再把地址赋值给a,所以String a = “a”; 
String b = “a”;执行之后,a和b中的值都是“a”在常量区中的地址,所以两者用==或者equals比较时都是true。

 

再看下面的代码:

 

        String a = "a";
        String x = new String("a");
        String y = new String("a");
        System.out.println(a == x);//结果:false
        System.out.println("-----------------------------");
        System.out.println(x == y);//结果:false

解释一下,为什么 x==y的结果是false:

String x = new String(“a”);这句代码就不一样了,代码运行时,会在堆中创建新的String对象,对象值为“a”,然后把该对象地址赋值给栈中的x。String x = new String(“a”);String y = new String(“a”);执行之后,堆中就有两个对象,对象值都是“a”,但两个对象的地址不同,且地址分别存放在x和y中,所以x==y会输出false, x.equals(y)会输出true。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值