1.Integer,Long包装类同类型比较
引用类型(包装类) == 比较的是引用地址。equals已经被重写,比较的是值。
-128 -127之间,用的是cache里的对象,不会new新对象,所以==是相等的。
Long l1 = 127L;
Long l2 = 127L;
System.out.println(l1 == l2); //true
System.out.println(l1.equals(l2)); //true
Long l3 = 128L;
Long l4 = 128L;
System.out.println(l3 == l4); //false
System.out.println(l3.equals(l4)); //true
2.不同类型之间的比较 Long和Integer,long和integer
包装类比较,类型不相等为false。 基本数据类型比较,精度相等数值相等则为true。
Long l1 = 127L;
Integer i1 = 127;
//System.out.println(i1 == l1); //不同包装类型,==会报错
System.out.println(i1.equals(l1)); //false,euqals源码为先比较类型是否和i1相等,再比较值,不相等则为false。
long ll1 = 128;
int ii1 = 128;
System.out.println(ll1 == ii1); //true, 基本数据类型比较的是数值。所以相等。
//Integer和long型比较,会先装箱long,不管是equals还是==都是false。尽量不要出现这种写法,没有意义。
3. 数值和Long,Integer,Float比较。
包装类会自动拆箱。
System.out.println(1 == 1f); //true
System.out.println(1 == 1l); //true
System.out.println(1l == 128f); //false