zoukankan      html  css  js  c++  java
  • 三、运行时的动态常量(学习笔记)

    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从堆内存中放入到常量池中,所以进行比较的时候两个对象的地址是一样的。

        

         

  • 相关阅读:
    奶酪工厂
    P1080 国王游戏(非高精版)
    【洛谷P2150】[NOI2015] 寿司晚宴
    【洛谷P3349】[ZJOI2016]小星星
    【洛谷P5785】[SDOI2012]任务安排
    【模板】严格次短路
    【洛谷P3647】[APIO2014]连珠线
    2021.10.27NOIP模拟总结
    【树形DP】CF1016F Road Projects
    2021CSP-S 总结
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/11381317.html
Copyright © 2011-2022 走看看