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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Integer i7 = 197;
Integer i8 = 197;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));

这个题里面的输出的答案是:
false
true

老师的解释是Integer存储对象的值是byte的,范围是从-128到127.如果比byte范围大的怎么办?怎么比较?怎么存储?

4 个回复

倒序浏览
本帖最后由 wxf468907066 于 2016-3-23 23:46 编辑

不是说在byte范围内的就自动装箱?比较的是两个int值,如果超过就需要重新创建对象,这是后比较的就是地址值了吧,在范围内的存在static中,然后就不了解了00.0
回复 使用道具 举报
Integer存储基本数据类型,在byte范围是存储在常量池,超过byte范围会创建新的对象。上面的题相当于创建了两个对象,当然是false。
回复 使用道具 举报
==号可以比较基本数据类型 也可以比较引用数据类型 基本类型是比较值 引用类型是比较地址值
回复 使用道具 举报
刚才发按的快了  ==号比较基本类型是值  比较引用数据类型是地址值  equals只能比较地址值  输出i7==i8 自动拆箱但是超过byte取值范围所以错误 可以用大的数据类型接收存储如Integer  character而equalse比较的是地址值 没有创建对象地址值是一样的所以正确
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马