A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏德宇 中级黑马   /  2013-12-22 13:35  /  1157 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏德宇 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
这个问题在张老师的视频中提到过.
首先对于: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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
谢谢
说的好清楚啊 谢谢
回复 使用道具 举报
不愿一人 发表于 2013-12-22 13:45
这个问题在张老师的视频中提到过.
首先对于:System.out.println(a1 == a2);//结果是true,
分析:a1和a2的数 ...


谢谢
说的好清楚啊 谢谢
回复 使用道具 举报
我在想缓存池的作用就是为了存放一个-127~127之间的数吗?他有别的作用吗?缓存池的what why how是什么?@不愿一人

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 是-128~127.还有字母。

查看全部评分

回复 使用道具 举报
刘旭升 发表于 2013-12-22 14:01
我在想缓存池的作用就是为了存放一个-127~127之间的数吗?他有别的作用吗?缓存池的what why how是什么?@ ...

是-128 ~ 127 吧??
回复 使用道具 举报
我看的是教科书,java大学实用教程。里面没有提及缓存池的概念、、盲区了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马