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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟伟杰 中级黑马   /  2013-4-23 02:33  /  1271 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟伟杰 于 2013-4-23 11:06 编辑

class IntegerTest
{
       public static void main(String[] args)
       {
              Integer m = 128;
              Integer n = 128;
              System.out.println(m==n);  //fale
              Integer a = 127;
              Integer b = 127;
              System.out.println(a==b);     //true
       }
}

代码中Integer对象自动拆箱成int类型比较两个数值是否相等,结果显示当取值大于127时为false,
Integer是int的封装对象啊,怎么取值是byte范围呢?能解释一下吗?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
由于自动装包,它们其实都是装在一个Integer对象中。
但是java编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在给Integer赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-128并且小于等于127时使用常量池.

也就是说
Integer -128~127实际上你可以看成是整形int,Interger 128以上的数值就不能看成int了,他是对象,两个值相同的不同的对象如果用==判断肯定是不等的,可以用equals判断。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
沈浩 发表于 2013-4-23 02:55
在给Integer赋值时,实际上是自动装箱的过程,也就是调用了Integer.valueOf(int)方法,当这个值大于等于-12 ...

我也不是很清楚,看了你们的解答,懂了,谢谢啊、、、
回复 使用道具 举报
续圆凯 发表于 2013-4-23 02:42
由于自动装包,它们其实都是装在一个Integer对象中。
但是java编译器在1.5版本中,对原型的自动装包是有一个 ...

咦,你这样说是不是也说明char,boolean,short 也有自动装箱,拆箱功能吗?

这样写对不?

Char a = 'a';
Char b = 'b';

System.out.println(a==b);//是true吗?因为a=97,b=98 <=你说的127、、、
回复 使用道具 举报
从JDK1.5版本开始引用自动装箱和自动拆箱特性,主要的目的是方便封装类和基本类型之间的转化,该特性允许基本数据类型之间直接相互赋值.

Character<=127并不代表所有 在范围内的 都可以是一个对象, 只有在这个范围内的两个相同数值的才被视为一个对象, 如果超出这个范围的话

你定义两个数值相同的Character ,内存中会生成两个对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马