【Java面试题】字节跳动一面,看似是基础的考察,实际上考的是对底层的理解,让人细思极恐。

【Java面试题】字节跳动一面,看似是基础的考察,实际上考的是对底层的理解,让人细思极恐。

🤡 Java每日一道大厂面试题
🧼
时间:2021年12月10日
🧼

  • 网上的 Java 基础面试题文章有非常多,但是大部分都比较老了。
  • 很多题目早已不是当前的热门题目,没有必要在这些题目上花太多时间。
  • 很多答案放现在已经不准确,可能会误导新人。
  • 因此,我每天都会整理一些时下高频的 Java 面试题,并反复斟酌,给出符合当前版本的解析。
  • 我会将所有的大厂的最新面试题进行记录,并整理成自己的题库,并按大厂的标准给出自己的解析,希望在这金三银四的季节里,能助你一臂之力。

🧼

💥 面试题会每天更新,让我们每天进步一点点,加油!



☘️ 基础考察,指出下题的输出结果?

public static void main(String[] args) {
    Integer a = 128, b = 128, c = 127, d = 127;
    System.out.println(a == b);
    System.out.println(c == d);
}

答案是:false,true。

执行 Integer a = 128,相当于执行:Integer a = Integer.valueOf(128),基本类型自动转换为包装类的过程称为自动装箱(autoboxing)。

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

在 Integer 中引入了 IntegerCache 来缓存一定范围的值,IntegerCache 默认情况下范围为:-128~127。

本题中的 127 命中了 IntegerCache,所以 c 和 d 是相同对象,而 128 则没有命中,所以 a 和 b 是不同对象。

但是这个缓存范围时可以修改的,可能有些人不知道。可以通过JVM启动参数:-XX:AutoBoxCacheMax= 来修改上限值,如下图所示:

【Java面试题】字节跳动一面,看似是基础的考察,实际上考的是对底层的理解,让人细思极恐。

相关文章

暂无评论

暂无评论...