Java基础 : Integer解析

Java基础之Integer解析

Integer的定义

首先举例一个经典面试题知识点

public class Test { 
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        int f = 100;
        System.out.println(a.equals(b));//true
        System.out.println(a == b);//true
        System.out.println(b == f);//true

        Integer c = 200;
        Integer d = 200;
        int e = 200;
        System.out.println(c.equals(d));//true
        System.out.println(c == d);//false
        System.out.println(d == e);//true

        Integer h = new Integer(100);
        Integer i = new Integer(100);
        System.out.println(h == i);//false
    }
}

然后看JDK源码中类Integer的定义:

package java.lang;

import java.lang.annotation.Native;

public final class Integer extends Number implements Comparable<Integer> {
    @Native private static final long serialVersionUID = 1360826667806852920L;
    @SuppressWarnings("unchecked")
    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
    //最小值
    @Native public static final int   MIN_VALUE = 0x80000000;
    //最大值
    @Native public static final int   MAX_VALUE = 0x7fffffff;
    //值
    private final int value;
    //构造方法
    public Integer(int value) {
        this.value = value;
    }
    ...
    ...
}

可以看出:

Integer是int的包装类(int是Java的八种基本数据类型之一)

Integer是一个已被序列化final类,默认值是null,是对象的引用

Integer的值在-2147483648~2147483647(21亿)之间,与int相同


Integer的方法

  • Integer.SIZE
 @Native public static final int SIZE = 32;
  • Integer.hashCode()
    //重写hashCode方法
    @Override
    public int hashCode() {
        //value为Integer的int值
        return Integer.hashCode(value);
    }
  • Integer.equals()
    public boolean equals(Object obj) {
    //如果参数同为Integer类
    if (obj instanceof Integer) {
        //对比int值,相等返回ture
        return value == ((Integer)obj).intValue();
    }
    //否则返回false
    return false;
    }
  • Integer.valueOf()
    //即int装箱Integer的方法
    public static Integer valueOf(int i) {
    //如果int参数在缓存IntegerCache中,则直接返回该对象
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    //不在缓存中,则new一个Integer对象返回
    return new Integer(i);
    }

也就是说,如果是-128~127之间的数,直接从缓存获取已有对象

其中IntegerCache的实现(转自清浅池塘)

image

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值