在jdk1.5的环境下,有如下4条语句:

以下输出结果为false的是:

A.   System.out.println(i01== i02);
B.   System.out.println(i01== i03);
C.   System.out.println(i03== i04);
D.   System.out.println(i02== i04);

5 5 收藏


直接登录
最新评论
  • ★小V★ 程序員 2016/06/11

    其實我很想說compile error因為line 4有個句號lol

    然後這題要問什麼?那條語句打印true?如果是的話只有A,C,D

  • 选择c,1.5有自动拆装箱了,如果在1.5之前这样写是编译不通过的,i03和i04是不同的对象,因此地址值肯定不一样

  • no game no life 程序员 2016/06/12

    C

  • 请问1和3是不是一样的阿 ?

  • 秦岭   2016/06/15

    又学到了,跟原生类型比较,integer对象会自动拆箱,io1会自动装箱,当数字大于127时,即使值相同,1和3会新建不同的对象.

  • 一个题目大家一起讨论花费几分钟产出效益明显高

  • 由于是jdk1.5,选项A,B,D肯定对的,对于C选项为什么是错的,先看看源码吧

    还有IntegerCache的

    也就是说,无论如何i03都是以new的形式产生的,所以和new出来的i04肯定是不相等的

  • 基础的东西,还是要多温故而知新,这个很早之前知道,现在看 又忘了。谢谢分享。

  • 哈哈 学生 2016/06/29

    B为什么是正确的

    • 清秋书 游戏策划 2016/06/30

      Integer.valueOf返回一个int型数据,所以自动拆箱了。

    • 清秋书 游戏策划 2016/06/30

      不对,说错了。囧。是因为59小于127,所以地址同时指向了同一个59的缓冲区。这是integer缓冲机制造成的。而使用new,会强制分配新的内存空间。所以C是错的。

  • 为什么选项D是true?