Java关系运算符 #
一、关系运算符概述 #
关系运算符用于比较两个值的大小关系,结果为布尔值(true或false)。
| 运算符 | 说明 | 示例 |
|---|---|---|
| == | 等于 | 5 == 5 → true |
| != | 不等于 | 5 != 3 → true |
| > | 大于 | 5 > 3 → true |
| < | 小于 | 5 < 3 → false |
| >= | 大于等于 | 5 >= 5 → true |
| <= | 小于等于 | 5 <= 3 → false |
二、基本比较 #
2.1 数值比较 #
java
int a = 10;
int b = 5;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // true
System.out.println(a < b); // false
System.out.println(a >= b); // true
System.out.println(a <= b); // false
2.2 不同类型比较 #
java
// 不同数值类型可以比较
int i = 10;
double d = 10.0;
System.out.println(i == d); // true(自动类型提升)
long l = 10L;
System.out.println(i == l); // true
// char可以与数值比较
char c = 'A';
System.out.println(c == 65); // true
System.out.println(c > 'B'); // false
2.3 字符比较 #
java
char c1 = 'A';
char c2 = 'B';
char c3 = 'A';
System.out.println(c1 == c3); // true
System.out.println(c1 < c2); // true(按Unicode编码比较)
System.out.println(c1 != c2); // true
// 大小写比较
char lower = 'a';
char upper = 'A';
System.out.println(lower > upper); // true
三、等于运算符详解 #
3.1 基本类型比较 #
java
int a = 10;
int b = 10;
int c = 20;
System.out.println(a == b); // true
System.out.println(a == c); // false
System.out.println(a != c); // true
3.2 引用类型比较 #
java
// 字符串比较
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";
// == 比较引用地址
System.out.println(s1 == s2); // false(不同对象)
System.out.println(s3 == s4); // true(常量池同一对象)
// equals比较内容
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // true
3.3 null比较 #
java
String s = null;
// 安全的null比较
if (s == null) {
System.out.println("字符串为null");
}
// 错误:会抛出NullPointerException
// if (s.equals("Hello")) { }
// 正确:先判断null
if (s != null && s.equals("Hello")) {
System.out.println("匹配");
}
// 或使用Objects.equals
import java.util.Objects;
System.out.println(Objects.equals(s, "Hello")); // false(安全)
四、条件语句中的应用 #
4.1 if语句 #
java
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
4.2 循环条件 #
java
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
for (int j = 0; j < 10; j++) {
System.out.println(j);
}
4.3 三元运算符 #
java
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // 20
String result = (a == b) ? "相等" : "不相等"; // "不相等"
五、常见陷阱 #
5.1 浮点数比较 #
java
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b); // false(精度问题)
// 正确方式:使用误差范围
double epsilon = 1e-10;
System.out.println(Math.abs(a - b) < epsilon); // true
// 或使用BigDecimal
import java.math.BigDecimal;
BigDecimal bd1 = new BigDecimal("0.1").add(new BigDecimal("0.2"));
BigDecimal bd2 = new BigDecimal("0.3");
System.out.println(bd1.compareTo(bd2) == 0); // true
5.2 字符串比较 #
java
String s1 = "Hello";
String s2 = new String("Hello");
// 错误:使用==比较字符串
if (s1 == s2) { } // false
// 正确:使用equals
if (s1.equals(s2)) { } // true
// 忽略大小写比较
String s3 = "HELLO";
if (s1.equalsIgnoreCase(s3)) { } // true
5.3 赋值与比较混淆 #
java
int a = 10;
// 错误:= 是赋值,== 是比较
// if (a = 5) { } // 编译错误
// 正确
if (a == 5) { }
// 布尔变量的特殊情况
boolean flag = true;
if (flag == true) { } // 可以
if (flag) { } // 更简洁
六、比较工具类 #
6.1 Objects类 #
java
import java.util.Objects;
String s1 = "Hello";
String s2 = null;
// 安全的equals
boolean eq = Objects.equals(s1, s2); // false
// 深度比较数组
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean deepEq = Objects.deepEquals(arr1, arr2); // true
6.2 Arrays类 #
java
import java.util.Arrays;
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
// 数组比较
boolean eq = Arrays.equals(arr1, arr2); // true
// 多维数组比较
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
boolean deepEq = Arrays.deepEquals(matrix1, matrix2); // true
6.3 Comparator接口 #
java
import java.util.Comparator;
import java.util.Arrays;
String[] names = {"Charlie", "Alice", "Bob"};
// 自定义比较
Arrays.sort(names, Comparator.naturalOrder());
// ["Alice", "Bob", "Charlie"]
Arrays.sort(names, Comparator.reverseOrder());
// ["Charlie", "Bob", "Alice"]
// 按长度比较
Arrays.sort(names, Comparator.comparingInt(String::length));
七、实现对象比较 #
7.1 实现Comparable接口 #
java
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
// getter, setter...
}
// 使用
List<Person> people = Arrays.asList(
new Person("张三", 25),
new Person("李四", 20)
);
Collections.sort(people); // 按年龄排序
7.2 重写equals方法 #
java
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
八、总结 #
| 运算符 | 说明 | 使用场景 |
|---|---|---|
| == | 等于 | 基本类型值比较、引用类型地址比较 |
| != | 不等于 | 判断两个值是否不等 |
| >, < | 大于、小于 | 数值大小比较 |
| >=, <= | 大于等于、小于等于 | 范围判断 |
关系运算符要点:
- 结果为布尔值
- 基本类型比较值,引用类型比较地址
- 字符串比较使用equals方法
- 注意浮点数精度问题
- null比较使用 == 或 Objects.equals
最后更新:2026-03-26