int i1 = 128;
Integer i2 = i1;
Integer i3 = 128;
System.out.println(i1 == i2); // true
System.out.println(i2 == i3); // false
同为128,为何判断结果却一个是true,另一个是false?
Integer i1x = 129;
Integer i1y = 129;
System.out.println(i1x == i1y); // false
System.out.println(i1x.equals(i1y)); // true
System.out.println("------------------------------");
// 采用构造方法
Integer i2 = new Integer(12); // int
Integer i3 = new Integer("12"); // String
System.out.println(i2 == i3);
System.out.println(i2.equals(i3));
System.out.println("------------------------------");
// 采用Integer类的缓存池(-128-127)
Integer i4 = Integer.valueOf(1271);
Integer i5 = Integer.valueOf("1271");
System.out.println(i4 == i5);
System.out.println(i4.equals(i5));
以上代码运行结果为:
false
true
false
true
false
true
因为每次new一个新的对象,都会创建一个新的缓存地址,所以通过"=="进行比较时,结果都为false。
而equals比较的时两者的内容是否相同,所以结果为true。