java中包装类详解–带你看源码
深入学习次啊能刻到骨子里—但是如果年代久远的话还是会忘,只不过忘得会慢一些;
弱弱的问一句,程序员会的老年痴呆吗?
欢迎在评论区回答—
为什么会有包装类???有了基本数据类型不就行了??
我们都说java是一门面向对象的语言,万物皆对象,将八种基本数据类型
抽象为类,于是乎就有了基本数据类型的对应的包装类;
其中数值型的父类为Number,Number父类为Object
字符型和布尔型的父类为 Object
每一中包装类都为final修饰–以Integer为例
说明包装类没有子类,不可被继承
话不都说,先看代码—Integer类
public class test {
public static void main(String[] args) {
// Integer i =new Integer(2);//此种写法已经舍弃了,直接写为下面的形式
// Integer I2=new Integer(2);
// System.out.println(i.equals(I2));
// System.out.println(i==I2);
Integer num1=12;
Integer num2=12;
System.out.println(num1==num2);//true
System.out.println(num1.equals(num2));//true
System.out.println(num1.compareTo(num2));//0
int a=12;
int b=12;
System.out.println(a==num1);//true
}
}
细心的可能发现基本数据类型和对象a==num1结果 为true
我们反编译一下会发现程序内部自动拆箱操作,
我们来看一下valueOf 方法的源码
这里面提到了IntegerCache.cache[i + (-IntegerCache.low)]再次查看
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer[] cache;
static Integer[] archivedCache;
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {