02_关系运算符(大于 小于 等于 不等于 大于等于 小于等于)
一、关系运算符概述
关系运算符用于比较两个操作数之间的关系,运算结果为布尔值(true或false)。关系运算符是 Java 中实现条件判断的基础,广泛应用于if语句、while循环、for循环等控制流结构中。
1.1 基本概念
- 关系运算符属于二元运算符(需要两个操作数)
- 运算结果为boolean类型
- 常用于比较数值大小、对象引用或是否相等
1.2 运算符列表
| 运算符 | 名称 | 示例 | 结果说明 |
|---|---|---|---|
| > | 大于 | 5>3 | true(5大于3) |
| < | 小于 | 2<4 | true(2小于4) |
| == | 等于 | 5==5 | true(5等于5) |
| != | 不等于 | 5!=3 | true(5不等于3) |
| >= | 大于等于 | 5>=5 | true(5大于等于3) |
| <= | 小于等于 | 5>3 | false(5小于等于3) |
二、关系运算符详解
2.1 大于运算符(>)
- 功能:判断左操作数是否大于右操作数
- 语法:操作数1 > 操作数2
- 示例:
int a = 10;
int b = 5;
boolean result = a > b; // result为true
- 适用类型:
- 所有数值类型(byte、short、int、long、float、double)
- 不适用于boolean类型和引用类型(除String等特殊类)
2.2小于运算符(<)
- 功能:判断左操作数是否小于右操作数
- 语法:操作数1 < 操作数2
- 示例:
double x = 3.14;
double y = 3.15;
boolean result = x < y; // result为true
- 注意事项:
- 浮点数比较时需注意精度问题
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a < b); // 可能输出false(因精度问题a≈0.30000000000000004)
2.3 等于运算符(==)
- 功能:判断两个操作数是否相等
- 语法:操作数1 == 操作数2
- 示例:
int num1 = 5;
int num2 = 5;
boolean isEqual = num1 == num2; // true
String str1 = "hello";
String str2 = "hello";
boolean strEqual = str1 == str2; // true(字符串池引用相同)
- 注意事项:
- 对于基本类型,比较的是值是否相等
- 对于引用类型,比较的是对象引用地址是否相同(即是否为同一个对象)
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false(不同对象)
System.out.println(s1.equals(s2)); // true(值相等)
2.4 不等于运算符(!=)
- 功能:判断两个操作数是否不相等
- 语法:操作数1 != 操作数2
- 示例:
int a = 10;
int b = 20;
boolean notEqual = a != b; // true
Object obj1 = new Object();
Object obj2 = new Object();
boolean objNotEqual = obj1 != obj2; // true(不同对象)
2.5 大于等于运算符(>=)
- 功能:判断左操作数是否大于或等于右操作数
- 语法:操作数1 >= 操作数2
- 示例:
int age = 18;
boolean isAdult = age >= 18; // true(等于18)
double score = 85.5;
boolean isHighScore = score >= 85.0; // true
2.6 小于等于运算符(<=)
- 功能:判断左操作数是否小于或等于右操作数
- 语法:操作数1 <= 操作数2
- 示例:
int temp = 25;
boolean isNormal = temp <= 30; // true(小于等于30)
long filesize = 1024 * 1024;
boolean isSmall = filesize <= 1024 * 1024 * 10; // 10MB以内
三、关系运算符的使用场景
3.1 条件判断
int age = 20;
if (age >= 18) {
System.out.println("成年");
} else {
System.out.println("未成年");
}
3.2 循环控制
// for循环
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
// while循环
int count = 0;
while (count <= 5) {
System.out.println(count);
count++;
}
3.3 数组边界检查
int[] arr = {1, 2, 3, 4, 5};
int index = 3;
if (index >= 0 && index < arr.length) {
System.out.println(arr[index]);
} else {
System.out.println("索引越界");
}
3.4 字符串比较(结合 equals)
String input = "admin";
if (!input.equals("guest") && input.length() >= 5) {
System.out.println("高级用户");
}
四、关系运算符的注意事项
4.1 基本类型与引用类型的比较差异
- 基本类型:==比较值是否相等
- 引用类型:==比较引用地址是否相同,值比较需用equals()方法
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2); // true(使用缓存对象)
Integer num3 = 200;
Integer num4 = 200;
System.out.println(num3 == num4); // false(新建对象)
System.out.println(num3.equals(num4)); // true(值相等)
4.2 浮点数比较的精度问题
- 浮点数由于精度问题,不能直接使用==比较
- 推荐使用差值判断(设置误差范围)
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-10; // 误差范围
boolean almostEqual = Math.abs(a - b) < epsilon;
System.out.println(almostEqual); // true
4.3 避免误写 == 为 =
- 关系运算符==用于比较,赋值运算符=用于赋值
- 误写会导致编译错误或逻辑错误
if (a = 5) { // 错误:a=5是赋值表达式,结果为int,不能作为boolean条件
// 编译错误:类型不匹配
}
if (a == 5) { // 正确:比较a是否等于5
// 逻辑正确
}
4.4 复合条件判断
- 使用逻辑运算符(&&、||)组合多个关系表达式
int score = 85;
boolean isGood = score >= 80 && score < 90; // 80-89分之间
五、关系运算符与其他运算符的优先级
5.1 优先级顺序(由高到低)
- 增量运算符(++、--)
- 算术运算符(+、-、*、/、%)
- 关系运算符(>, <, >=, <=, ==, !=)
- 逻辑运算符(!、&&、||)
- 赋值运算符(=, +=, -=, 等)
5.2 示例与括号使用
int a = 10;
int b = 5;
int c = 3;
// 正确的优先级计算
boolean result = a + b > c * 2; // (10+5) > (3*2) → 15>6 → true
// 用括号明确顺序
boolean result2 = (a + b) > (c * 2); // 同上,更清晰
六、常见问题与解决方案
6.1 引用类型比较的常见错误
问题:误用==比较引用类型的值是否相等
String s1 = new String("abc");
String s2 = new String("abc");
if (s1 == s2) { // 错误:比较引用地址而非值
System.out.println("相等");
}
解决方案:使用equals()方法比较值
if (s1.equals(s2)) { // 正确:比较字符串值
System.out.println("相等");
}
6.2 空指针异常问题
问题:对null对象调用equals()方法
String s = null;
if (s.equals("abc")) { // 运行时异常:NullPointerException
// ...
}
解决方案:先判断是否为null
if (s != null && s.equals("abc")) { // 先检查null,避免异常
// ...
}
6.3 整数溢出后的比较问题
问题:溢出的整数比较可能得到错误结果
int max = Integer.MAX_VALUE;
System.out.println(max + 1 > max); // 错误:max+1溢出为负数,结果为false
}
解决方案:使用更大的数据类型
long maxLong = Integer.MAX_VALUE;
System.out.println(maxLong + 1 > maxLong); // 正确:true
6.4 字符与数值的比较
问题:字符与数值比较时的类型转换
char c = 'A'; // 'A'的ASCII码为65
if (c == 65) { // 正确:char自动转为int比较
System.out.println("等于65");
}
说明:char类型可自动转为int,因此可以直接与整数比较。
七、总结
- 关系运算符作用:用于比较操作数之间的关系,结果为boolean
- 基本类型比较:==比较值,引用类型需用equals()比较值
- 注意事项:
- 避免==与=混淆
- 浮点数比较需考虑精度
- 引用类型比较使用equals()
- 先判断null再调用方法
掌握关系运算符的使用是 Java 编程的基础,合理运用这些运算符可以实现灵活的条件判断和流程控制,避免常见的编程错误。

浙公网安备 33010602011771号