踩坑实录3

这周第 395 场周赛 - 力扣(LeetCode)掉大分!排查下来竟然是一个基础语法弄错了,看来真是基础不牢地动山摇!令人震惊的是大一下学 Java 从来没有遇到这个疏忽导致的问题😢

简单来说,就是包装类型之间(比如 Integer)之间的比较,使用 == 比较的是内存地址!作为一个特例,JVM 的常量池技术会维护 -128~127 的 Integer 包装类,即:

1
2
3
4
5
6
Integer a = 3;
Integer b = 3; // a, b 底层引用的是常量池中的同一个对象,使用==比较对象地址自然相等
Integer c = 128;
Integer d = 128; // c,d 指向不同地址的对象
System.out.println(a == b); // true
System.out.println(c == d); // false

包装类型的比较请使用 equals(),或者转换成原始类型再比较!

包装类型与其对应的原始类型比较时,可以直接使用 ==,因为编译器会进行自动解包装的操作


踩坑实录3
https://balddemian.github.io/Happy-Debugging/
作者
Peiyang He
发布于
2024年4月28日
许可协议