网站首页 > 精选教程 正文
项目封板问题多,
检查检讨认过错。
工期太短没处说,
新人不会我来做。
--------------------打油诗分割线--------------------
众所周知,为每种基本数据类型都提供了对应的包装类,而将基本数据类型转为包装类型的过程,就是装箱。反之就是拆箱。
那么,拆装箱是如何实现的呢,其实就是在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;
}
- 上一篇: Python中有哪些很香的语法糖?
- 下一篇: python 17个常用语法糖,学完你就是高手
猜你喜欢
- 2024-12-11 不同语言实现质因数分解算法的差异
- 2024-12-11 嫌 Java 太繁琐、表现力太差?这些 JVM 语言给你不一样的体验
- 2024-12-11 盘点C#最有价值的10个语法糖
- 2024-12-11 干货丨对Java很熟悉 但这四件事你未必知道
- 2024-12-11 promise 语法糖基本用法
- 2024-12-11 python 17个常用语法糖,学完你就是高手
- 2024-12-11 Python中有哪些很香的语法糖?
- 2024-12-11 【python】(10)语法糖
- 2024-12-11 JS中的类?class语法糖??? 两分钟秒了
- 2024-12-11 java基础语法糖之增强for循环
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)