包装类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方法 只比较值得大小。

posted @ 2022-03-23 16:40  豆浆不要糖  阅读(47)  评论(0)    收藏  举报