java源码阅读——包装类


包装类

在java中并不是所有变量都是类,java存在着基本数据类型,在很多时候,我们需要将基本数据类型转化为对象,这个时候就需要包装类

基本数据类型包装类位数
byteByte8
booleanBoolean8
shortShort16
intInteger32
longLong64
floatFloat32
doubleDouble64
charCharacter16

我们这里就用Integer这个类为例,来看一下包装类的源码

Number

Integer继承自Number类,并且实现了comparable接口

public final class Integer extends Number implements Comparable<Integer>

点开Number的继承结构,我们看到有很多的数值相关的类都是继承自Number,所以我们先来瞅一眼这个Number类
在这里插入图片描述
Number类中的方法很简单,这几个方法分别返回数值的int,long,float,double,byte以及short表示,并且intValue(),longValue(),floatValue(),doubleValue()这几个还是抽象方法,所以继承自Number的数值类,均可以用这几个方法返回该数值的不同表示
在这里插入图片描述

Integer

回到Integer类,一眼就看到定义的最大值和最小值
在这里插入图片描述
所以Integer的最大值为 2 31 − 1 2^{31}-1 2311,数值为2,147,483,647,最小值是- 2 31 2^{31} 231,数值为-2,147,483,648

valueOf是个编程经常要用到的方法,一般我们用它将int基本类型或者字符串转换为包装类Integer,java的自动装箱也是调用的valueOf方法

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));	// parseInt方法将字符串数值转换为int值
}

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

与我们设想不太一样的地方是,在valueOf这个常用方法中,我们看到了一个叫做IntegerCache的东西,这个究竟是什么东西呢?

在代码里面找到了IntegerCache这个静态私有类

private static class IntegerCache

这个类里面建了一个cache数组,类型是Integer,在这个数组里面存有值为-128到127的Integer类的实例,如果调用valueOf方法时,所取的值在这个范围里面,那么就可以直接从cache里面拿取相应的类,而不用新new一个,从而减小开销

看到Byte,Short和Long里面都做了类似的处理,所以只要看看Integer就可以对其他的数值包装类做对比

贴一下看看Long里面的cache实际代码,就是一个非常简单的数组构造

private static class LongCache {
    private LongCache(){}

    static final Long cache[] = new Long[-(-128) + 127 + 1];

    static {
        for(int i = 0; i < cache.length; i++)
            cache[i] = new Long(i - 128);
    }
}

重写的equals方法

// 重写了equals方法,比较数值
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

Integer源码看到这里结束了,其他的包装类均可以通过类比的方式了解里面的大概

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值