黑马程序员技术交流社区

标题: 有道题一直看不懂,希望有大神帮助我解答 [打印本页]

作者: Laopozini123    时间: 2016-3-23 23:05
标题: 有道题一直看不懂,希望有大神帮助我解答
Integer i7 = 197;
Integer i8 = 197;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));

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

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


作者: wxf468907066    时间: 2016-3-23 23:45
本帖最后由 wxf468907066 于 2016-3-23 23:46 编辑

不是说在byte范围内的就自动装箱?比较的是两个int值,如果超过就需要重新创建对象,这是后比较的就是地址值了吧,在范围内的存在static中,然后就不了解了00.0
作者: user_lqb    时间: 2016-3-25 10:46
Integer存储基本数据类型,在byte范围是存储在常量池,超过byte范围会创建新的对象。上面的题相当于创建了两个对象,当然是false。
作者: lyoivneg    时间: 2016-3-25 12:07
==号可以比较基本数据类型 也可以比较引用数据类型 基本类型是比较值 引用类型是比较地址值
作者: lyoivneg    时间: 2016-3-25 12:13
刚才发按的快了  ==号比较基本类型是值  比较引用数据类型是地址值  equals只能比较地址值  输出i7==i8 自动拆箱但是超过byte取值范围所以错误 可以用大的数据类型接收存储如Integer  character而equalse比较的是地址值 没有创建对象地址值是一样的所以正确




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