常量池

java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:

  类和接口的全限定名;

  字段的名称和描述符;

  方法和名称和描述符。

1.  Integer i1 = new Integer(1); Integer i2 = new Integer(1); i1 == i2 --->false

   Integer i3 = 1; Integer i4 = 1; i3 == i4 --->true

2.  String s1 = new String("love"); String s2 = new String("love"); s1 == s2 --->false

   String s1 = "love" + "java"; String s2 = "lovejava"; s1 == s2 --->true

     String str1 = "love"; String str2 = "java"; String s3= s1 + s2; s1 == s3 --->false

   final String str1 = "love"; final String str2 = "java"; String s3= s1 + s2; s1 == s3 --->true (宏替换)

java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负责创建和管理大于127的这些类的对象。

3.  Integer i1 = 127; Integer i2 = 127; i1 == i2 --->true

   Integer i3 = 128; Integer i4 = 128; i3 == i4 --->false

4.  Boolean b1 = false; Boolean b2 = false; b1 == b2 --->true

5.  Double d1 = 1.0; Double d2 = 1.0; d1 == d2 --->false

原文地址:https://www.cnblogs.com/zawjdbb/p/6903194.html