美文网首页
Java 8种基本类型包装类和String的常量池

Java 8种基本类型包装类和String的常量池

作者: 文竹小二 | 来源:发表于2017-10-28 18:14 被阅读40次

    Byte,Short,Integer,Long

    通过如下代码输出可以看出常量池数值范围为-128~127。

    Integer i1 = -129;
    Integer i2 = -129;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = -128;
    i2 = -128;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = 127;
    i2 = 127;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = 128;
    i2 = 128;
    System.out.println("i1=i2\t" + (i1 == i2));
    

    输出结果:
    i1=i2 false
    i1=i2 true
    i1=i2 true
    i1=i2 false

    Character

    通过如下代码输出可以看出常量池数值范围为0~127。

    Character i1 = (char)-1;
    Character i2 = (char)-1;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = (char)0;
    i2 = (char)0;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = (char)127;
    i2 = (char)127;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    i1 = (char)128;
    i2 = (char)128;
    System.out.println("i1=i2\t" + (i1 == i2));
    

    输出结果:
    i1=i2 false
    i1=i2 true
    i1=i2 true
    i1=i2 false

    Boolean

    通过如下代码输出可以看出它也具有常量池。

    Boolean i1 = true;
    Boolean i2 = true;
    System.out.println("i1=i2\t" + (i1 == i2));
    

    输出结果:
    i1=i2 true

    Float,Double

    Float和Double无常量池。

    Float i1 = 127F;
    Float i2 = 127F;
    System.out.println("i1=i2\t" + (i1 == i2));
    
    Double i3 = 127D;
    Double i4 = 127D;
    System.out.println("i3=i4\t" + (i3 == i4));
    

    输出结果:
    i1=i2 false
    i3=i4 false

    String

    引用文章:
    https://tech.meituan.com/in_depth_understanding_string_intern.html
    简单总结:可以通过使用双引号声明出来的String对象的方式和String.intern的方式在字符串常量池中生成对象。若字符串常量池中对象已存在,则无需重复生成对象。同时注意1.6和1.7的重要区别。

    相关文章

      网友评论

          本文标题:Java 8种基本类型包装类和String的常量池

          本文链接:https://www.haomeiwen.com/subject/lzmspxtx.html