三、运行时的动态常量(学习笔记)

public class Test {

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        String s4 = new String("abc");
        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s1==s3.intern());
        System.out.println(s3==s4);
    }



}

代码执行的结果:

  true
  false
  true
  false

 

出现上面的

 

结果的解释如下图

  

 

     任何一个字符串的创建都会扔到常量池中,常量池是方法区的一块存储空间

     通过new 创建的对象会放到堆上

     == 比较的对对象的内存地址

     String 在常量池中存储的数据结构类似一个HashSet ,里面存储的是无序 不重复的字符串,所以两个“abc” 放入到里面存储的是一个

     s3 和 s4 是通过new创建的对象,所以放入到堆中,所以两个对象的内存地址不一样。

     而 通过 s3.intern() 这个方法,可以将s3从堆内存中放入到常量池中,所以进行比较的时候两个对象的地址是一样的。

    

     

 

转载于:https://www.cnblogs.com/kangxinxin/p/11381317.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值