🤡 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= 来修改上限值,如下图所示:
|