黑马程序员技术交流社区

标题: 面试题 [打印本页]

作者: 谢晓明    时间: 2015-6-3 00:16
标题: 面试题
byte常量池面试题
          Integer i1 = new Integer(127);
          Integer i2 = new Integer(127);
          System.out.println(i1 == i2);  // false
          System.out.println(i1.equals(i2));  // true

          System.out.println("--------");

          Integer i3 = new Integer(128);
          Integer i4 = new Integer(128);
          System.out.println(i3 == i4);  // false
          System.out.println(i3.equals(i4)); // true
          Integer i5 = 128;
          Integer i6 = 128;
          System.out.println(i5 == i6);  // false
          System.out.println(i5.equals(i6)); // true

          System.out.println("--------");

          Integer i7 = 127;
          Integer i8 = 127;
          System.out.println(i7 == i8); // true
          System.out.println(i7.equals(i8)); // true

          结论:byte范围内的值(-128 ~ 127),java提供了一个常量池。直接赋值给Integer,是从常量池里面获取的。
作者: liuning    时间: 2015-6-3 08:22
不懂你要表达什么意思
作者: tougboy    时间: 2015-6-3 09:48
把我这小白给带沟里了
作者: 山崩地裂    时间: 2015-6-3 09:56
kikt 发表于 2015-6-3 09:04
Integer类型的对象有一个“常量池”是从-128~127之间
这个范围内的数直接指向常量池,而不用重新开辟内存空 ...

错了应该是
new Integer(127)==new Integer(127)//false

1.png (3.91 KB, 下载次数: 3)

1.png

2.png (1.69 KB, 下载次数: 4)

2.png

作者: kmlitheima    时间: 2015-6-3 10:00
这个帖讲的不错!
作者: kmlitheima    时间: 2015-6-3 10:01
山崩地裂 发表于 2015-6-3 09:56
错了应该是
new Integer(127)==new Integer(127)//false

对象操作?也能行?你应该理解错了吧!
作者: 山崩地裂    时间: 2015-6-3 10:06
kmlitheima 发表于 2015-6-3 10:01
对象操作?也能行?你应该理解错了吧!

可以,比较的是两个匿名对象的地址值
作者: kmlitheima    时间: 2015-6-3 10:15
山崩地裂 发表于 2015-6-3 10:06
可以,比较的是两个匿名对象的地址值

是啊,,当然不一样了。根本就不能做为引证!




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