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

        

         

  • 相关阅读:
    Python – GitHub CentOS
    Python – GitHub Ubuntu
    学习jQuery Treeview一天的感受
    让我郁闷了一个下午的list为null
    在徘徊中前进的一天
    都是被逼的,被逼的
    和技术无关,生活中的一点感受
    我又错了
    忽然的感受
    学习jQuery的一天
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/11381317.html
Copyright © 2011-2022 走看看