随笔:15 文章:206 评论:35 引用:0
fenglin
创新、创意、挑战
C++博客
首页
发新随笔
发新文章
联系
聚合
管理
Integer自动装箱、拆箱问题
请先看一段代码
//
代码段1
Integer i1
=
200
;
Integer j1
=
200
;
System.out.println(i1
==
j1);
//
代码段2
Integer i2
=
100
;
Integer j2
=
100
;
System.out.println(i2
==
j2);
这两段代码的结果分别是多少?
JDK1.6上执行代码段1的结果为false,代码段2的结果为true.
实验1:在JDK1.4下代码段1不能编译通过的,会提示:“ Type mismatch: cannot convert from int to Integer”的错误,改写为:“Integer i1 = new Integer(200); Integer j1 = new Integer(200);”,编译正常。
两段代码运行结果为false,true,代码段1由于是对象使用==比较,比较的是两个对象的地址,所以为false(这个大家都应该明白了)。
实验2: 在JDK1.5下代码段1可以编译通过,因为其实现了自动装箱(Autoboxing)和自动拆箱(Auto-Unboxing)。
两段代码运行结果为false,true
从实验2就可以看出,问题出在了装箱/拆箱过程,通过反编译,找出Integer赋值调用的是Integer.valueOf方法,查JDK源代码,如下所示:
public static Integer valueOf(int i)
{
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
看到这里,我想大家都应该明白为什么会是false了。原来在装箱时,将-128<=i1<=127范围之内的数据打包成缓存里的Integer对象了,由于不用new,所以这个区间里的值用直接=赋值方法得到的变量地址就是同一个,而超出这个范围的数值就会new一个Integer对象出来,用==运行符来计算,怎么也不可能为true。
发表于 2010-11-25 18:43
风林
阅读(652)
评论(0)
编辑
收藏
引用
所属分类:
JAVA
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
[转]java编程中'为了性能'一些尽量做到的地方
JAVAC命令行错误
Java基础_Collection接口下的子类存储特性
Android_常用控件使用
Android_Activity&Intent&Layout
Integer自动装箱、拆箱问题
自定义比较器、排序
JDBC操作实例
常用数据库的JDBC连接代码
[转]J2SE_内部类
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
CALENDER
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
jBPM
(rss)
随笔档案
2011年7月 (1)
2011年4月 (1)
2011年2月 (1)
2010年11月 (1)
2010年10月 (2)
2010年9月 (3)
2010年8月 (4)
2010年7月 (2)
文章分类
AJAX(2)
(rss)
Android(2)
(rss)
C#(20)
(rss)
C++(6)
(rss)
ckeditor&ckfinder(1)
(rss)
CSS
(rss)
Delphi(2)
(rss)
Hibernate(39)
(rss)
JAVA(95)
(rss)
jQuery(1)
(rss)
JSP(9)
(rss)
Maven(1)
(rss)
MySQL(4)
(rss)
OOP(1)
(rss)
Python(42)
(rss)
Spring(31)
(rss)
SQL Server(4)
(rss)
Struts2(35)
(rss)
SVN(1)
(rss)
Tomcat(1)
(rss)
Ubuntu(1)
(rss)
软件加解密技术
(rss)
杂文(1)
(rss)
文章档案
2011年8月 (1)
2011年7月 (3)
2011年6月 (19)
2011年5月 (2)
2011年4月 (1)
2011年2月 (1)
2010年12月 (2)
2010年11月 (21)
2010年10月 (67)
2010年9月 (48)
2010年8月 (37)
2010年7月 (4)
新闻档案
2010年7月 (1)
相册
CSS
Hibernate
搜索
最新评论
1. re: Struts2_三种传参数方法
方式的发生
--阿飞史蒂夫
2. re: 在Win7上搭建JSP开发环境
评论内容较长,点击标题查看
--邹
3. re: ckeditor&ckfinder&s2sh集成
评论内容较长,点击标题查看
--庸几何
4. re: 在Win7上搭建JSP开发环境
下个 myeclipse@lou
--孙毅
5. re: 在Win7上搭建JSP开发环境
@lou
运行 -cmd 找到startup.bat 在java 环境中运行
--孙毅
阅读排行榜
1. 开始找Java开发类工作了(472)
2. 给一家公司的软件做加密方案(437)
3. 周一到周五都得出差,周末才能回(408)
4. 一流、二流、三流(381)
5. 从WIN32开发转型到WEB开发(361)
评论排行榜
1. 周一到周五都得出差,周末才能回(2)
2. 给力2011(2)
3. 最近工作有点忙(0)
4. 生活(0)
5. 在博客园开博了(0)
Powered By:
博客园
模板提供
:
沪江博客