JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java基础语法糖之拆箱装箱

wys521 2024-12-11 12:13:41 精选教程 29 ℃ 0 评论

项目封板问题多,

检查检讨认过错。

工期太短没处说,

新人不会我来做。

--------------------打油诗分割线--------------------

众所周知,为每种基本数据类型都提供了对应的包装类,而将基本数据类型转为包装类型的过程,就是装箱。反之就是拆箱。

那么,拆装箱是如何实现的呢,其实就是在java编译源码时实现的,在java编译器编译源码时,发现赋值的是包装类对象,接收的是基础数据类型,就进行拆箱。反之就进行装箱。

装箱:

如下代码所示:

system.out.println(1);

在java编译后,其在.class文件中就是如下形式:

system.out.println(Integer.valueof(1));

这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。

各个包装类,都有对应的.valueof方法,用于装箱的操作,所以如果下次写如下代码

Integer i=10;

就知道里面默认调用了Integer.valueof方法咯。

拆箱:

请看如下代码:

Integer i =new integer(1);//语句1

int n = i;//语句2

语句2会执行一个拆箱的过程,而拆箱默认调用了Integer.intValue语句。

总结:

装箱过程是通过调用包装类的valueOf方法实现的,而拆箱过程是通过调用包装类的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。

值得关注的点:

其中几个包装的特殊使用:

如下所示,是Integer类的源码,可以看出如果值在-128到127之间,不会返回新的对象,直接使用已经缓存的对象。

public static Integer valueOf(int i) {

if(i >= -128 && i <= IntegerCache.high)

return IntegerCache.cache[i + 128];

else

return new Integer(i);

}

而Integer、Short、Byte、Character、Long几个类的实现类似,浮点型的Float和Double则没有这样的处理。

编码中需要小心的点:

如果写了如下这样的代码,要小心了,因为返回值包装类对象可能为null,到时候就会碰到最喜闻乐见的NPE异常了。

public int getvalue(){

Integer i=....

return i;

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表