从J2SE 5.0开始提供基本数据类型的自己主动装箱(autoboxing)、拆箱(unboxing)功能。

何为自己主动装箱:

当我们创建一个Integer对象时,却能够这样:

Integer
i = 100; (注意:不是 int i = 100; )

实际上,运行上面那句代码的时候,系统为我们运行了:Integer i = new Integer(100); 此即基本数据类型的自己主动装箱功能。

何为自己主动拆箱

自己主动拆箱(unboxing),也就是将对象中的基本数据从对象中自己主动取出。例如以下可实现自己主动拆箱:

Integer
integer=100;

int
flag=integer;  //该语句即实现了自己主动拆箱。

在进行编译时,编译器再自己主动依据您写下的语句,推断是否进行自己主动装箱动作。

错误一:NullPointerException

例如以下程序在编译时不会出错,在执行时则会报NullPointerException

Integer i = null;
int j = i;

这种语法在编译时期是合法的,可是在执行时期会有错误,由于这种写法相当于:

Integer i = null;
int j = i.intValue();

null表示i没有參考至不论什么的对象实体。它能够合法地指定给对象參考名称。因为实际上i并没有參考至不论什么的对象,所以也就不可能操作intValue()方法,这样上面的写法在执行时会出现NullPointerException错误。

错误二:NoSuchMethodError

java在进行编译时期,会自己主动进行装箱拆箱操作,当我们编译结束,生成的.class文件后。该.class二进制文件肯定将Integer对象和基本数据类型差别对待。

错误重现:

步骤一:编译Student类

public class Student {
public int getStudents(int flag){
return flag;
}
}

步骤二:编译并执行Teacher类。无不论什么问题

public class Teacher {

	private static Student student=new Student();
public static void main(String[] args) {
System.out.println(getTeacherCount(3));
}
public static int getTeacherCount(Integer integer) {
return student.getStudents(3);
}
}

步骤三:

我们改动Student类。并编译

<pre name="code" class="java" style="color: rgb(51, 51, 51); line-height: 20px; ">public class Student {
public Integer getStudents(Integer integer){
return integer;
}
}

步骤四。

又一次执行Teacher类中的main方法,报错NoSuchMethodError.

版权声明:本文博客原创文章,博客,未经同意,不得转载。

java自己主动打开包装盒很容易导致两个误区的更多相关文章

  1. Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死

    问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...

  2. 转:Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  3. 重点|183道Java面试题可以说很详细了

    <p style="text-align: right;"><span style="font-size: 14px;color: rgb(136, 1 ...

  4. [转]Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  5. Java的BIO和NIO很难懂?用代码实践给你看,再不懂我转行!

    本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动. 1.引言 这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关 ...

  6. 解决: java.io.IOException: 打开的文件过多 的问题

    问题 前一阵子公司项目做了一次压力测试, 中间出现了一个问题: 在50多个并发的时候会出现 java.io.IOException: 打开的文件过多 这个异常. 但是在没有并发的时候是不会出现这个问题 ...

  7. Android之使用JAVA占位符格式数据(很实用)

    小编虽然是学java出生,但工作之后就一直从事android开发,很多java基础都忘记完了,最近一年从ES换到了AS,原来的很多习惯都收到了挑战,比如我喜欢ES写方法的时候先在JAVA projec ...

  8. 在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决

    在java.ext.dirs中使用环境变量导致crontab执行不成功的问题及解决 Table of Contents 1. java.ext.dirs的使用和环境变量 2. 问题:在crontab中 ...

  9. wordpress网站后台打开速度很慢解决方法?

    今天就和朋友们分享下,wordpress网站后台最近打开速度很慢的原因及解决方法.推荐第三种方法 方法/步骤   1.安装插件:在插件中搜索 Disable Google Fonts,选择安装,然后启 ...

随机推荐

  1. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  2. Mac下MAMP初试体验

    原创文章,转载请注明出处! 近期小学习了一下Mac下的Apache,Mysql,php.这里记录一下,以备忘 1 php 1.1 php返回值的測试 在MAMP下測试成功,直接echo返回所数据 1. ...

  3. 刚開始学习的人制作VMOS场效应管小功放

    VMOS场效应管既有电子管的长处又有晶体管的长处,用它制作的功率放大器声音醇厚.甜美,动态范围大.频率响应好.因此近年来在音响设备中得到了广泛应用. 大功率的场效应管功率放大器.电.路比較复杂.制作和 ...

  4. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用.   解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中 ...

  5. 测试framebuffer

    static GGLContext *gr_context = 0; static GGLSurface gr_framebuffer[2]; static unsigned gr_active_fb ...

  6. C#递归复制文件夹

    /// <param name="sources">原路徑</param> /// <param name="dest">目 ...

  7. sql为数字添加千分位(也就是钱的格式)

    感觉这个东西在项目中用得挺多的,之前在前台页面是用正则来处理,现在由于是数据查询,所以直接在查出数据的时候将其转为指定的千分位格式,省的前台再处理,不讲原理,因为我也看不懂,不过会用就行了,在网上找了 ...

  8. [置顶] Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作

    SQLite  是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...

  9. MySQL installer

  10. 实用Shell命令备忘

    开场白:这里简单记录一些常用的bash命令,一则备忘,二来希望可以帮助别人解决一些问题. 1.检测文件是否存在 if [ -f ./foo.txt ] then echo the file exist ...