一、String缓存池
String类中存在一个常量缓存池,例如 String str1 = “虎虎生威”;,用这种方式定义字符串时,该字符串会被缓存进字符串常量池。当再定义另一个内容相同的字符串时,例如String str2 = “虎虎生威”;,str2将会指向常量池中“张三”这个字符串的地址,不需要另外开辟新空间。因此,这样定义的字符串可以通过“==”比较内容是否相等。
代码如下(示例):
String str1 = "虎虎生威";
String str2 = "虎虎生威";
String str3 = new String("虎虎生威");
System.out.println(str1 == str2);// 输出结果为:true
System.out.println(str1 == str3);// 输出结果为:false
二、Integer缓存池
Integer缓存池是有限制的,只能缓存-128~127之间的数字 ,如果定义的两个相同的数字在这个范围之间,可以使用“==”比较值是否相等。但是如果超出这个范围就不能使用了。Integer是引用类型,因此在比较两个Integer类型变量的值时,一般使用equals()方法。
代码如下(示例):
Integer n1 = 127;
Integer n2 = 127;
Integer n3 = 1433223;
Integer n4 = 1433223;
System.out.println(n1 == n2);// 输出结果为:true
System.out.println(n3 == n4);// 输出结果为:false
System.out.println(n3.equals(n4));// 输出结果为:true