一、Integer与int
①代码
@Test
public void testInteger() {
int i = 129;
int j = 129;
Integer m = 128;
Integer n = 128;
Integer x = -128;
Integer y = -128;
int g = 128;
System.out.println("测试Integer与int之间使用'=='和equals的情况:");
System.out.println("1、int与int的等号判断:" + (i == j));
System.out.println("2、Integer与Integer的等号判断(-128~127):" + (m == n));
System.out.println("3、Integer与Integer的等号判断(大于127和小于-128的情况):" + (x == y));
System.out.println("4、Integer与Integer的equals判断:" + m.equals(n));
System.out.println("5、Integer与int的equals判断:" + m.equals(g));
}
②运行截图:
③总结:1、只要是Intger对象参加比较的情况,都使用equals方法进行比较。
2、同时是int类型数据选择"=="进行判断即可。
3、两个Integer对象的值不在-128~127时,将会不相等。
原因:在这个范围内,系统会自动为这范围内的每一个整数缓存对象,这范围的每一个相同的数字对应的Integer对象所对应的引用都是相等的,因为指向的对象都是一个,而这范围之外的就没有这种缓存。也就和正常的引用一样,因为指向的是不同的对象,所以不相等,这样做的原因是为了加快系统效率。而且JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当Integer i=128时,128不在常量池范围内,所以在自动装箱过程中需new 128,所以地址不一样。(总之就是对象比的是引用地址,但是Java提前将-128~127的数创建好了Integer对象,所以说,所有的-128~127的数将共用一个Integer对象)。
二、String对象与字符串
①代码
@Test
public void testString() {
String l1 = "lihao";
String l2 = "lihao";
String l3 = new String("lihao1");
String l4 = new String("lihao1");
String l5 = "lihao1";
System.out.println("字符串与字符串的等号判断:" + l1 == l2);
System.out.println("String对象与String对象的等号判断:" + l3 == l4);
System.out.println("String对象与String对象的等号判断:" + l3.equals(l4));
System.out.println("String对象与字符串的equals判断:" + l3.equals(l5));
}
②运行截图: