本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

关注电子政务、大型企业应用开发、Web、Workflow、MOM、MDA、RCP、GEF

email:gmluyang@gmail.com


链接

好友
bluedavy-林昊
刑红瑞
SixSun-翻译
Birt中文指南
SixSun-OpenDoc
Eclipse RCP and Web in action(编写中)

我的分类(专题)

日志更新

最新评论

留言板


Blog信息
blog名称:SixSun的Blog
日志总数:152
评论数量:372
留言数量:13
访问次数:2372843
建立时间:2004年12月13日




[J2SE / 基础类]诡异的autoboxing与unboxing
随笔,  读书笔记

SixSun 发表于 2006/3/8 0:09:00

autoboxing、 unboxing   再来看一个,先看看程序,您以为结果是如何? Integer i1 = 100;Integer i2 = 100; if (i1 == i2)      System.out.println("i1 == i2");else      System.out.println("i1 != i2");  以自动装箱与拆箱的机制来看,我想您会觉得结果是显示"i1 == i2",您是对的!那么下面这个您觉得结果是什么? Integer i1 = 200;Integer i2 = 200; if (i1 == i2)      System.out.println("i1 == i2");else      System.out.println("i1 != i2");  结果是显示"i1 != i2",这有些令人讶异,语法完全一样,只不过改个数值而已,结果却相反。其实这与'=='运算符的比较有关,'=='可用来比较两个基本型态的变量值是否相等,事实上'=='也用于判断两个对象变量名称是否参考至同一个对象。所以'=='可以比较两个基本型态的变量值是否相等,也可以判断两个对象变量的参考对象是否相同,当您如前两个程序的方式撰写时,编译器不知道您实际上要比较的是哪一种?所以对于值从-128到127之间的值,它们被装箱为Integer对象后,会存在内存之中被重用,所以当值在100,使用'=='进行比较时,i1 与 i2实际上参考至同一个对象。如果超过了从-128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次都新建一个Integer对象,所以当值在 200,使用'=='进行比较时,i1与i2参考的是不同的对象。


阅读全文(3220) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144776095 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号