测试常量池
那天学些了常量池的一些特性, 写了一些代码来验证理论.

1 public class TestConstantsPool { 2 public static void main(String[] args) { 3 integerPoolNewInteger(); 4 } 5 6 static void stringPool() { 7 String a = "a123"; 8 //用常量池 9 String a_1 = a.intern(); 10 //用常量池 11 String b = "a123"; 12 //不使用常量池 13 String c = new String("a123"); 14 15 boolean e = a_1 == a; 16 boolean e2 = a_1.equals(a); 17 System.out.println(a_1); 18 } 19 20 //-128~127以内的Integer值 21 static void integerPool() { 22 Integer a1 = 127; 23 Integer b1 = 127; 24 //true 25 boolean e = a1 == b1; 26 //true 27 boolean e2 = a1.equals(b1); 28 29 System.out.println(e); 30 } 31 32 33 //-128~127以内的new Integer值 34 static void integerPoolNewInteger() { 35 Integer z1 = 127; 36 37 //不使用常量池 38 Integer a1 = new Integer(127); 39 Integer b1 = new Integer(127); 40 41 //引用地址同 a1 42 Integer aa1 = a1; 43 //引用地址同 b1 44 Integer bb1 = b1; 45 //引用地址同 z1 46 Integer zz1 = z1; 47 48 //使用常量池 49 Integer c1 = Integer.valueOf("127"); 50 Integer d1 = Integer.parseInt("127"); 51 52 //false 53 boolean e = a1 == b1; 54 //true 55 boolean e2 = a1.equals(b1); 56 57 System.out.println(e); 58 } 59 60 61 //>=128 62 static void integerPool128() { 63 Integer a1 = 128; 64 Integer b1 = 128; 65 66 //false 67 boolean e = a1 == b1; 68 //true 69 boolean e2 = a1.equals(b1); 70 71 System.out.println(e); 72 } 73 74 75 static void decimalPool_1() { 76 BigDecimal a1 = BigDecimal.ONE; 77 BigDecimal a2 = BigDecimal.ONE; 78 79 //true 80 boolean e = a1 == a2; 81 //true 82 boolean e2 = a1.equals(a2); 83 84 System.out.println(e); 85 86 } 87 88 static void decimalPool_2() { 89 BigDecimal a1 = new BigDecimal(1); 90 BigDecimal a2 = BigDecimal.ONE; 91 92 //false 93 boolean e = a1 == a2; 94 //true 95 boolean e2 = a1.equals(a2); 96 97 System.out.println(e); 98 99 } 100 101 static void decimalPool_3() { 102 BigDecimal a1 = new BigDecimal(1); 103 BigDecimal a2 = new BigDecimal(1); 104 105 //false 106 boolean e = a1 == a2; 107 //true 108 boolean e2 = a1.equals(a2); 109 110 System.out.println(e); 111 112 } 113 114 //Byte,Short,Integer,Long,Character,Boolean。这5种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象 115 //浮点数类型的包装类Float,Double 116 }
public class TestConstantsPool { public static void main(String[] args) { integerPoolNewInteger(); }
static void stringPool() { String a = "a123"; //用常量池 String a_1 = a.intern(); //用常量池 String b = "a123"; //不使用常量池 String c = new String("a123");
boolean e = a_1 == a; boolean e2 = a_1.equals(a); System.out.println(a_1); }
//-128~127以内的Integer值 static void integerPool() { Integer a1 = 127; Integer b1 = 127; //true boolean e = a1 == b1; //true boolean e2 = a1.equals(b1);
System.out.println(e); }
//-128~127以内的new Integer值 static void integerPoolNewInteger() { Integer z1 = 127;
//不使用常量池 Integer a1 = new Integer(127); Integer b1 = new Integer(127);
//引用地址同 a1 Integer aa1 = a1; //引用地址同 b1 Integer bb1 = b1; //引用地址同 z1 Integer zz1 = z1;
//使用常量池 Integer c1 = Integer.valueOf("127"); Integer d1 = Integer.parseInt("127");
//false boolean e = a1 == b1; //true boolean e2 = a1.equals(b1);
System.out.println(e); }
//>=128 static void integerPool128() { Integer a1 = 128; Integer b1 = 128;
//false boolean e = a1 == b1; //true boolean e2 = a1.equals(b1);
System.out.println(e); }
static void decimalPool_1() { BigDecimal a1 = BigDecimal.ONE; BigDecimal a2 = BigDecimal.ONE;
//true boolean e = a1 == a2; //true boolean e2 = a1.equals(a2);
System.out.println(e);
}
static void decimalPool_2() { BigDecimal a1 = new BigDecimal(1); BigDecimal a2 = BigDecimal.ONE;
//false boolean e = a1 == a2; //true boolean e2 = a1.equals(a2);
System.out.println(e);
}
static void decimalPool_3() { BigDecimal a1 = new BigDecimal(1); BigDecimal a2 = new BigDecimal(1);
//false boolean e = a1 == a2; //true boolean e2 = a1.equals(a2);
System.out.println(e);
}
//Byte,Short,Integer,Long,Character,Boolean。这5种包装类默认创建了数值[-128,127]的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象 //浮点数类型的包装类Float,Double}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现