Java为每种基本类型提供了对应的包装器类型,那么包装器类型在Java中扮演和起到什么的角色,这样从Java这个面向对象的语言特性来说了。因为容器中加入的都是类的对象而不是基本数据类型。故需要先将基本数据类型打包成对象。这样就符合Java这个面向编程对于基本变量类型的适应的需求了。
下面就以Integer例子说面自动装箱和自动拆箱是怎么回事。
1.自动装箱:
Integer integer = 10;
2.自动装箱:
Integer integer = 10;
int i = integer;
以上就是自动装箱和自动拆箱的过程,那么这么简单的过程是怎么实现的呢?我们通过命令行程序,进入CLASSPATH(也就是bin目录下.class文件所在的路径),javap反编译查看一下生成的字节码(终点部分):
public static void main(java.lang.String[]);flags: ACC_PUBLIC, ACC_STATICCode:stack=1, locals=3, args_size=10: iconst_11: invokestatic  #16                 // Method java/lang/Integer.valueO
f:(I)Ljava/lang/Integer;4: astore_15: aload_16: invokevirtual #22                 // Method java/lang/Integer.intVal
ue:()I9: istore_210: return
看到在自动装箱的时候,也就是第6行,Java虚拟机会自动调用Integer的valueOf方法;在自动拆箱的时候,也就是第10行,Java虚拟机会自动调用Integer的intValue方法。这就是自动拆箱和自动装箱的原理。
以上就是自动装箱和拆箱的过程,不过在实际的开发过程中,我们经常会遇到基本常量的自动装箱和拆箱,而且会经常因为这些参数导致的空指针异常情况,所以在遇到基本数据作为对象参数进行自动装箱和拆箱的考虑空指针异常的情况是很有必要的。
在这里得注意外一个问题,代码如下:
String s="10.23";
int i1=Integer.parseInt(s);
System.out.println(i1);//NumberFormatException
Double d=Double.parseDouble(s);
System.out.println(d);
代码在相互转化的时候注意转换代码得数据类型和所定义的变量类型是一样的,知得注意的是Integer中数值在转换的时候有没有一个范围呢?
我们先看看Integer中parseInt的源码:
public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10);}
在这个方法中返或两个参数,一个传入阐述,那么这个返回参数10究竟是个干什么的呢?且看源码中的解释:
The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the {@link #parseInt(java.lang.String,int)} method.
这样就是一目了然了,运行以下代码进一步的验证其论述的准确性:
String s="10000000000";
int i1=Integer.parseInt(s);
System.out.println(i1);
运行结果为:
Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000"
还有这里注意一个Integer的现场见的陷阱,具体的注意事项出门右转,详见另一篇文章《java中一个容易忽视的问题》。

java中的自动装箱和自动拆箱相关推荐

  1. Java 进阶——自动装箱和自动拆箱

    1.什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a ...

  2. java中为什么自动装箱拆箱_Java自动装箱和自动拆箱的理解

    Java自动装箱和自动拆箱的理解 1.代码 public class AutoBoxing { public static void main(String[] args) { Integer a = ...

  3. java 自动装箱自动拆箱_自动装箱和自动拆箱

    自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基本类型了. 基 ...

  4. 第三次学JAVA再学不好就吃翔(part64)--自动装箱和自动拆箱

    学习笔记,仅供参考 自动装箱和自动拆箱 装箱:把基本类型转换为包装类类型 int x = 100; Integer i1 = new Integer(x); 拆箱:把包装类类型转换为基本类型 int ...

  5. java 自动装箱自动拆箱,java自动装箱、自动拆箱和正常情况性能比较

    自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况. package com.wmmad.test; import junit. ...

  6. java自动装箱和自动拆箱

    Java自动装箱和自动拆箱是Java语言的一颗语法糖. 下面说一下java的自动装箱和拆箱的例子 1. 深入理解java虚拟机上的一个例子 public static void testJvmBook ...

  7. Java基础:自动装箱和自动拆箱

    Java的自动包装类型 首先基本数据类型:4类8种 基本数据类型 对应包装器类 byte(1字节) Byte short(2字节) Short int(4字节) Integer long(8字节) L ...

  8. 【自动装箱】Java自动装箱、自动拆箱

    Java中集合只允许存储引用数据类型,那么 int char double等基础数据类型,如何存储在集合里呢?Java在JDK1.5版本以后推出了自动装箱.自动拆箱操作,那么什么是自动装箱呢,下面我们 ...

  9. java自动装箱的好处_Java自动装箱、自动拆箱

    一.前言 Java自动装箱和自动拆箱是JDK5.0版本提供的新特性,所以在JDK5.0后的版本中都可以使用,之前的版本则不支持该特性. 理解自动装箱和自动拆箱需要先对java中的8种原始数据类型和相对 ...

最新文章

  1. Struts2+spring+jdbc 以xml配置形式整合
  2. 当专业动画师用GAN帮自己“偷懒”,几分钟就完成了几周的工作
  3. AI芯片大战已然打响,国内外巨头抢占万亿智能家居市场
  4. 在php中存redis数据,redis缓存都存哪些数据
  5. 并发基础(八) java线程的中断机制
  6. treasure what you have now
  7. Numpy练习题100题-提高你的数据分析技能
  8. 互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...
  9. 非线性最优化(二)——高斯牛顿法和Levengerg-Marquardt迭代
  10. python 操作excel 教程_Python学习笔记(十六)—Python操作Excel
  11. 洛谷P1288 取数游戏II[博弈论]
  12. 如何将远程服务器MYSQL数据库导出导入
  13. 拉普拉斯变换转换简表
  14. 两个一一对应的txt文本去重
  15. 基于SSM的图书馆管理系统
  16. IDEA中出现java file outside of source root
  17. win7连接远程桌面时出现黑屏的解决方法(亲测有效)——终于找到解决办法了
  18. cmake + googletest 之一 入门
  19. dwc3_gadget_init分析
  20. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

热门文章

  1. DirectX12 3D游戏开发实践(龙书)第四章 Direct3D的初始化
  2. 光的干涉衍射计算机模拟仿真技术,单缝衍射的计算机仿真模拟研究
  3. 【实例】用 Python tkinter 开发 桌面便签
  4. ZYNQ7 AXI DMA IP核应用测试
  5. Android Java GPS坐标与高斯坐标相互转换(二)
  6. 35. 应用监控【监控端点健康信息】
  7. 操作系统第七章和第八章:文件管理
  8. 苹果审核内购图片无法上传的问题
  9. PureMVC(JS版)源码解析(五):SimpleCommand类
  10. 制作优品新手指南页面