基本数据类型与其包装类的比较

最近刷题的时候碰到了不少基本数据类型和包装类进行比较的问题,一开始做的有点蒙,错多了之后就自己整理了一下,特记录下来加深印象。


在java中不能定义基本数据类型对象,为了能将基本数据类型视为对象处理,并且能够调用方法简化其使用过程,java为每个基本类型都提供了包装类。
下面是8种基本数据类型图解
8种基本数据类型
下面是基本数据类型及其包装类对照表:

基本数据类型包装类
intInteger
byteByte
shortShort
longLong
floatFloat
doubleDouble
charChar
booleanBoolean

包装类提供了多种常用方法,如下图:
Integer类的方法
其中equals方法在本篇中有所涉及,摘录其源码如下:

    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

可以看出,先通过instanceof判断比较对象obj是否是Integer的类实例,如果不是,则return false,若是,则强制转换为Integer类并通过intValue()方法取值,比较调用方法的对象的值和该值是否相等,返回比较结果。
包装类往往涉及到比较两个对象或者比较对象和基本数据类型的大小的问题。
下面以最常用的Integer类为例,用程序说明几种判断方式。
通过总结得到以下四点:
1.同样被new出的两个相同类型的对象一定是不“==”的,因为==比较的是位置,而new出的对象一定是全新地址的,但是用equals比较时是比较的数值,是相等的。

    Integer a=new Integer(5);
    Integer b=new Integer(5);
    System.out.println(a==b);//return false
    System.out.println(a.equals(b));//return true

2.在“==”进行比较时,有以下原则:
1)不用new得到新对象,当要赋的值在区间[-128,127]时,该值会被缓存到IntegerCache.cache中,此时赋值的是同一对象,用“==”比较会返回ture;

    Integer a=5;
    Integer b=5;
    System.out.println(a==b);//return true

2)当要赋的值在(-∞,-128)或(127,+∞)时,即时不用new得到新对象,用“==”比较也会返回false;

    Integer a=128;
    Integer b=128;
    Integer c=-129;
    Integer d=-129;
    System.out.println(a==b);//return false
    System.out.println(c==d);//return false

3)当用new赋值时,一定返回false;
3.当Integer对象与基本类型做比较时,默认将Integer对象做拆箱操作,比较基本类型,而基本类型的比较只与数值有关,因此数值一样就返回true;

    Integer a=new Integer(5);
    int c=5;
    System.out.println(a==c);//return true

4.若两个Byte对象相加,则会自动升格为int,只能赋值给int或更高精度的类型,因此赋值给Byte一定出错。

        Byte a = new Byte((byte) 5);
        Byte b = new Byte((byte) 5);
        Byte c = a + b;
        /*
         * 报错如下:
         * Type mismatch: cannot convert from int to Byte 
         */

希望有缺漏的地方各位能够予以补充。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值