黑马程序员技术交流社区

标题: 为什么会这样? [打印本页]

作者: 夏德宇    时间: 2013-12-22 13:35
标题: 为什么会这样?
本帖最后由 夏德宇 于 2013-12-22 13:57 编辑
  1. public class AutoBox {
  2.         public static void main(String[] args) {
  3.                 Integer a1 = 13;
  4.                 Integer a2 = 13;
  5.                
  6.                 Integer b1 = 130;
  7.                 Integer b2 = 130;
  8.                
  9.                 System.out.println(a1 == a2);//结果是true
  10.                 System.out.println(b1 == b2);//结果是false
  11.         }
  12. }
复制代码

作者: 不愿一人    时间: 2013-12-22 13:45
这个问题在张老师的视频中提到过.
首先对于:System.out.println(a1 == a2);//结果是true,
分析:a1和a2的数值都小于一个字节,
所以在第一次创建 Integer对象也就是a1时就会在对象缓存池中存有一个值为13的Integer的对象
当再次创建值为13的Integer的对象也就是a2时,就会直接将缓存池中13的引用传递给a2
所以a1和a2指向的对象地址是同一个,所以打印的结果是true
对于:System.out.println(b1 == b2);//结果是false
分析:首先要知道,当创建的对象的数值大于一个字节要表达的数时,就不会再数据缓存池中
缓存该对象,而b1和b2的值是130大于128,所以b1和b2创建的是两个完全不同的对象,所以两者不等
打印结果为false
作者: 夏德宇    时间: 2013-12-22 13:50
谢谢
说的好清楚啊 谢谢
作者: 夏德宇    时间: 2013-12-22 13:51
不愿一人 发表于 2013-12-22 13:45
这个问题在张老师的视频中提到过.
首先对于:System.out.println(a1 == a2);//结果是true,
分析:a1和a2的数 ...


谢谢
说的好清楚啊 谢谢
作者: 刘旭升    时间: 2013-12-22 14:01
我在想缓存池的作用就是为了存放一个-127~127之间的数吗?他有别的作用吗?缓存池的what why how是什么?@不愿一人
作者: 夏德宇    时间: 2013-12-22 18:24
刘旭升 发表于 2013-12-22 14:01
我在想缓存池的作用就是为了存放一个-127~127之间的数吗?他有别的作用吗?缓存池的what why how是什么?@ ...

是-128 ~ 127 吧??
作者: 刘旭升    时间: 2013-12-22 21:45
我看的是教科书,java大学实用教程。里面没有提及缓存池的概念、、盲区了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2