基本类型和包装类对象使用==和equals
背景:在回文链表判断算法题中,测试案例[-129, 129]通不过,查资料得到以下结果。
class Solution {
// 思路1:将链表的元素存储到数组中,然后数组进行回文判断
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) return true;
// 将元素存储到数组中
ArrayList<Integer> list = new ArrayList<>();
while (head != null) {
list.add(head.val);
head = head.next;
}
// 数组判断回文
int left = 0, right = list.size()-1;
while (left < right) {
// 细节:使用get方法进行比较,但数字超过127就会转换为对象进行比较,所以要用equals
if (!list.get(left).equals(list.get(right))) {
return false;
}
left++;
right--;
}
return true;
}
}
-
值不同
- 使用==和equals比较都返回false
-
值相同
- 使用==比较
- 基本类型-基本类型、基本类型-包装类型返回true
- 包装类型-包装类型返回false
- 缓存中的包装对象返回true(JVM缓存部分基本类型常用的包装类对象,如Integer缓存-128-127)
- 使用equals比较:
- 包装类型-基本类型返回true
- 包装对象-包装对象返回true
** 注:仅用于学习交流**