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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗海云 中级黑马   /  2013-2-23 14:49  /  1978 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗海云 于 2013-2-23 16:07 编辑
  1. package com.itheima.day01;

  2. public class AutoBox {

  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stu
  8. Integer i1 = 128;
  9. Integer i2 = 128;
  10. System.out.println(i1 == i2);  
  11. <FONT color=red>//就是想问下为什么这个程序执行第一次就是true...第二次咋就变成false了呢..
  12. </FONT>}

  13. }
复制代码
能说下具体的原理,?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
我这打印的都是false   ==比的是地址值,所以这是两个对象 所以不一样就false
用equals比就是比值大小 就是true

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6

查看全部评分

回复 使用道具 举报
不能吧?应该一直是false的。因为java为了优化内存,当数值在byte范围(-128 ~ 127)的时候,已经创建了一个Integer的对象,如Integer a = 127;再创建一个Integer b = 127;的时候,不会再为对象开辟新的内存空间,只是给b开辟了栈内存空间。这些数值都是存在于常量池中,和String是在一样的。所以a和b两个值是相同的,但是超过了这个范围,就不一样了,创建的两个对象都会在堆内存中开辟新的空间。所以用“==”比较地址值就不相同了。

评分

参与人数 1黑马币 +6 收起 理由
陈丽莉 + 6

查看全部评分

回复 使用道具 举报
打印一直是false。当数值在范围-128 ~ 127,引用的是同一内存空间。
回复 使用道具 举报
黄玉昆 发表于 2013-2-23 15:12
不能吧?应该一直是false的。因为java为了优化内存,当数值在byte范围(-128 ~ 127)的时候,已经创建了一 ...

对哦.谢谢哥们热心解答..
回复 使用道具 举报
应该全部都是false的 Integer是引用类型变量 两个对象在内存中的地址不一样 肯定不相等了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马