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