java自己主动打开包装盒很容易导致两个误区

从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.

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

时间: 2024-10-09 23:12:57

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

(转)关闭WordPress自动加载的Open Sans字体,总是连接googleapi.com,导致打开wordpress很慢

转自http://www.xuanfengge.com/turn-off-automatic-loading-wordpress-open-sans-fonts.html 在网上搜了一番,有四种方法. (1)安装别人针对这个问题开发好的屏蔽加载谷歌字体的插件 (2)修改过滤函数function.php (3)自己手动替换到加载谷歌字体的路径 (4)使用GoAgent 我使用了第一种方法来解决问题, 下载插件: 1. 插件一 名称:Remove Open Sans font Link from W

黄聪:wordpress后台加载ajax.googleapis.com导致打开速度很慢的解决方案

打开wordpress后台,发现很卡,通过开发者工具看到是因为加载http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css这个元素导致的. <link rel='stylesheet' id='jquery-ui-smoothness-css' href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoot

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

Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的线程函数用法.概述等.首先让我们来了解下在操作系统中进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,

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

链接:http://t.cn/AiDMxg6g Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象.因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

1 /* 2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 4 */ 5 import static java.lang.System.out; 6 7 public class PersonDemo 8 { 9 public static void main(String[] args) 10 { 11 //*********测试父类与子类之间的循环调用的问

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

小编虽然是学java出生,但工作之后就一直从事android开发,很多java基础都忘记完了,最近一年从ES换到了AS,原来的很多习惯都收到了挑战,比如我喜欢ES写方法的时候先在JAVA project中写个main方法验证下对不对,比如数据拆分,时间对比等等,但AS使用中,因为和ES很多环境变量冲突,就把ES卸载了,现在很多都不方便. 在开发中使用比较多的就是设置view的值/给view填充值得时候,需要格式化数据,小编今天用了一写时间,做了下小小的整理 1.%s 字符串类型 用处:多用于字符

为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小

头部加入 <header> <metaname="viewport"content="width=device-width, initial-scale=1"> </header> 为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小,布布扣,bubuko.com

java流工具类使用很方便

package com.auto.generate.utils ; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * File Name: StreamTool.jav

Java闭关修炼64课 很适合新手学习的JAVA视频教程

Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar  java闭关修炼第一课 什么是java.rar  java闭关修炼第七课 基础语言要素(1).rar  java闭关修炼第七课 基础语言要素.rar  java闭关修炼第三十一课 静态方法(1).rar  java闭关修炼第三十一课 静态方法.rar  java闭关修炼第三十七课 成员初始化顺序讨论(1).rar  java闭关修炼第三十七课 成员初始化顺序讨论.rar  java闭