跟着小白浅谈"自动装箱及自动拆箱"

自动装箱及自动拆箱篇:

    今天小白和大家们谈谈什么是自动装箱及自动拆箱,那么什么是自动装箱和拆箱了?

其实就是包装类(wrapper)提供的一种机制自动装箱(autoboxing)自动拆箱(unboxing)该功能是j2se.5.0提供的,里面有基本数据类型所对应

的对象类型(共有8种包装类),如:

 

byte——Byte

short——Short

int ——Integer

long——Long

float——Float

double——Double

char——Character

boolean——Boolean

那么基本数据类型和包装类有什么区别了?


int  a =10;//基本数据类型是没有什么方法可用的

Integer b = 10;//包装类是有方法可以用的

那么什么是自动装箱了?

如:

Integer b = 10;//就是自动装箱,其实是这样的 Integer a = new Integer(10);

//因为编译会自动帮我们做这样的语法编译

那么什么是自动拆箱了?

Integer a = 10;//装箱

int b = a;//拆箱 实际是 int b = a.intValue();

运算时候的自动拆箱:

Integer a = 10;

System.out.println(a++);

说到这我来和大家谈谈当初我陷进的一道题目。

题目是这样的:

Integer a = 1000,b=1000;

Integer c=100,d=100;

System.out.println(a==b);

System.out.println(c==d);

我第一感告诉我输出 true true,但是答案却是 false true 我当时就慌了,这种坑题对咱们小鸟伤害过万·····

为什么会出现这个答案?

咱们来看看Integer类的源码就清楚了

跟着小白浅谈

对于是-128~127的数据Integer.valueOf(int i )会返回的是缓存的Integer对象而不是新建一个对象所以在上面那题中c==b是true

而a 和 b 已经超出大小,Integer.valueOf(int i )方法会返回一个新建的对象所以a 和 b 不是指向同一个对象。


din 

你可能感兴趣的:(javase)