1. 包装类与自动装箱问题:在justjavac的博客上看到翻译的一篇文章 离开java,寻找更佳语言的十大理由 中关于自动装箱的一个描述:

这个特性是为了解决因原生类型的存在所导致的问题,在Java5引入的。它允许静默地转换原生类型到相应的对象,但这常常导致其它的问题。 比如Integer可以为null,但int不能,因此这时JVM只能抛出一个难以调试的空指针异常(NullPointerException). 此外,它还可能导致其它奇怪的行为,就像下面的例子,我们就很难理解,变量test为什么是false:

Integer a = new Integer(1024);

Integer b = new Integer(1024);

boolean test = a < b || a == b || a > b;

昨晚看到这里,一时想不开,咦,为什么是false? 第二天搜了一下,终于想明白了,">""<"都能根据值来判断,那么当然是false,那么照道理说a==b应该是true啦。

但问题就出在这里,两个变量都是对象,对象的 == 只有当两者指向同一个对象时(且hashcode相等?)才算true。两者又是new的,尽管如果基本类型值如果在-128~127的话还是为true的,但是当超过范围,那么又是另外一个问题了。

面试的时候遇到过的一道面试题(尽管在后面工作中也没用到。)

其原理:

在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用(-128 到 127 缓存) JDK5.0后才有的特性

比较一个int跟Integer时 == 是先将integer的intValue方法得到value属性(int)来比较

举例:

Integer i = 123;

Integer j = 123;

i==j;//true,当数值超出-128~127时,为false

最新文章

  1. 窥探Swift之基本数据类型
  2. Net环境下比较流行的ORM框架对比
  3. ASP.NET常用函数(参考用)
  4. ubuntu12.04下一个简单的conky安装
  5. Linux下开发常用 模拟 Http get和post请求
  6. RDS记录
  7. AT&amp;T ASSEMBLY FOR LINUX AND MAC (SYS_FORK)
  8. 重新想象 Windows 8 Store Apps (37) - 契约: Settings Contract
  9. 微信第一个“小程序”亮相:不是APP胜似APP!
  10. postgre去重复记录
  11. go安装windows源码
  12. 单源最短路径的Bellman-Ford 算法
  13. 转】MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
  14. CMSIS Example - osMutex osMutexWait osMutexRelease
  15. 【js】js方法中直接跳转到servlet
  16. 彻底搞清js中闭包(Closure)的概念
  17. Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例
  18. hdu1520 第一道树形DP,激动哇咔咔!
  19. wireshark 过滤条件汇总
  20. hiho 1015 KMP

热门文章

  1. Code First 迁移,及迁移错误
  2. git 命令熟悉
  3. ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)
  4. Feature Access
  5. ubuntu14.04下直接修改apache2默认目录导致wordpress样式改变的解决办法
  6. 最全的linux命令大全,shell运维手册
  7. mysql主从
  8. 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
  9. tp框架之验证码
  10. ExtJs基础知识总结:自定义弹窗和ComboBox自动联想加载(四)