包装类Integer的==
基本对象的包装类几乎都存在缓存;
还有自动拆箱与自动装箱;
测试代码如下:
public class IntergerTest_1 { public static void main(String[] args) { int i1 = 12; int i2 = 12; int i3 = 200; int i4 = 200; Integer it1 = 12; Integer it2 = 12; Integer it3 = 200; Integer it4 = 200; Integer nit1 = new Integer("12"); Integer nit2 = new Integer("12"); Integer nit3 = new Integer("200"); Integer nit4 = new Integer("200"); //int基本类型与Integer.valueOf //自动拆箱 System.out.println("i1 == it1:"+ (i1 == it1)); System.out.println("it1 == i1:"+(it1 == i1)); //int基本类型与new Integer //自动拆箱 System.out.println("i1 == nit1:"+(i1 == nit1)); System.out.println("nit1 == i1:"+(nit1 == i1)); //Integer.valueOf 与 new Integer System.out.println("it1 == nit1:"+(it1 == nit1)); System.out.println("nit1 == it1:"+(nit1 == it1)); //Integer.valueOf 与 Integer.valueOf //此时要注意常量池 System.out.println("it1 == it2:"+(it1 == it2)); System.out.println("it3 == it4:"+(it3 == it4)); //new Integer 与 new Integer System.out.println("nit1 == nit2:"+(nit1 == nit2)); System.out.println("nit3 == nit4:"+(nit3 == nit4)); //equals比较的是数值 //包装类。equals int //此时i1会自动装箱 System.out.println("it1 equals i1:"+ it1.equals(i1)); System.out.println("nit1 equals i1:"+ nit1.equals(i1)); //new Integer equals Integer.valueOf System.out.println("nit1 equals it1:"+ nit1.equals(it1)); //此时后面的参数会自动装箱 System.out.println("nit1 equals xxx:"+ nit1.equals(12)); System.out.println("nit1 equals xxx.00:"+ nit1.equals(12.00)); Double b1 = 12.; System.out.println("b1 equals xxx.00:" + b1.equals(12.00)); System.out.println("b1 equals xxx.0:" + b1.equals(12.0)); System.out.println("b1 equals xxx:" + b1.equals(12)); } }
运行结果:
i1 == it1:true
it1 == i1:true
i1 == nit1:true
nit1 == i1:true
it1 == nit1:false
nit1 == it1:false
it1 == it2:true
it3 == it4:false
nit1 == nit2:false
nit3 == nit4:false
it1 equals i1:true
nit1 equals i1:true
nit1 equals it1:true
nit1 equals xxx:true
nit1 equals xxx.00:false
b1 equals xxx.00:true
b1 equals xxx.0:true
b1 equals xxx:false
- 总结:
基本类型 与 包装类型 == 时,包装类型会自动拆箱为基本类型;
只有当两个.valueOf() == 时,此时才会使用到缓存,Integer缓存范围是-128-127;
只有包装类才有.equals();()内的参数可以是基本类型,当为基本类型时,会自动装箱;
()内假设直接写基本类型数字,例如12,那么需要判断该数字是否是本包装类的基本类型,类型不同则必然返回false;具体详情参见最后 b1 equals xxx结果。
小知识:
.equals(xxx) 具体幂等性,即a.equals(b) 为true时,那么b.equals(a) 也一定为true;
对于一般对象来说,.equals(xxx) 其实与 == 是一样的,只是各个包装类 重写了equals方法,使得 equals方法 只比较值得大小。

浙公网安备 33010602011771号