在开发的过程中,在jdk1.5后可以直接用==来做比较,后来发现不是这个样子的哈哈~ 先看一段代码与运行结束:
public static void main(String[] args) {
Integer i1 = 1;
Integer i2 = 1;
System.out.println( "i1 == i2:" + (i1 == i2));
Long l1 = 1l;
Long l2 = 1l;
System.out.println("l1 == l2:" + (l1 == l2));
Double d1 = 1d;
Double d2 = 1d;
System.out.println("d1 == d2:" + (d1 == d2));
Float f1 = 1f;
Float f2 = 1f;
System.out.println("f1 == f2:" + (f1 == f2));
}
当看到这个结果,当然是没有问题的。我们再来看一下别一段代码与结果:
Integer i1 = 200;
Integer i2 = 200;
System.out.println( "i1 == i2:" + (i1 == i2));
Long l1 = 200l;
Long l2 = 200l;
System.out.println("l1 == l2:" + (l1 == l2));
Double d1 = 200d;
Double d2 = 200d;
System.out.println("d1 == d2:" + (d1 == d2));
Float f1 = 200f;
Float f2 = 200f;
System.out.println("f1 == f2:" + (f1 == f2));
这次全是false时,这时发现Integer的比较不能使用==,那么可以用equals可以进行比较吗?我们可以试一下:
Integer i1 = 200;
Integer i2 = 200;
System.out.println( "i1 == i2:" + (i1.equals(i2)));
Long l1 = 200l;
Long l2 = 200l;
System.out.println("l1 == l2:" + (l1.equals(l2)));
Double d1 = 200d;
Double d2 = 200d;
System.out.println("d1 == d2:" + (d1.equals(d2)));
Float f1 = 200f;
Float f2 = 200f;
System.out.println("f1 == f2:" + (f1.equals(f2)));
ok,没有问题,它们是可以用equals进行比较的。那么为什么Integer/Long为1时,可以使用==比较,当为200时不能使用呢?我们看一下源代码:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i |