java关系运算符比较变量需区分类型:基本类型用==直接比数值,引用类型用==比地址、equals()比内容,字符串和包装类需特别注意缓存与null安全。

基本类型直接比数值
int、long、double、char 等原始类型,用 ==、!=、>、=、 直接比较值,安全且高效。
- char 比较本质是 Unicode 码值:'a' > 'A' → true(97 > 65)
- 不同类型可自动提升:int x = 5; double y = 5.0; x == y → true
- char 和 int 混合也成立:char c = '5'; c == 53 → true('5' 的 Unicode 是 53)
引用类型慎用 ==
== 对引用类型只比较内存地址,不是内容。即使两个对象内容一模一样,只要不是同一个实例,== 就返回 false。
- new String("abc") == new String("abc") → false
- 但 "abc" == "abc" 可能为 true(字符串常量池优化,不具普遍性)
- Boolean、Integer 等包装类在 -128~127 范围内可能缓存,导致 == 偶尔“碰巧”为 true,但不可依赖
字符串和对象该用 equals()
要判断内容是否相等,一律用 equals() 方法。
- "abc".equals("abc") → true
- String s = null; s.equals("abc") → 抛 NullPointerException
- 更稳妥写法:Objects.equals(s, "abc")(自动处理 null)
- 自定义类需重写 equals(),否则默认仍是地址比较
布尔值和特殊类型限制
boolean 类型支持 == 和 !=,但不能参与 >、
- boolean a = true, b = false; a == b → false(合法)
- a > b → 编译报错(boolean 不支持大小比较)
- List l1 = Arrays.asList(1,2); List l2 = Arrays.asList(1,2); l1 == l2 → false;l1.equals(l2) → true(ArrayList 重写了 equals)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











