Appearance
5.3 关系运算符
关系运算符的概念
关系运算符用于比较两个值之间的关系,返回一个布尔值(true 或 false)。Java 提供了多种关系运算符,用于比较数值、字符和对象的关系。
关系运算符列表
| 运算符 | 名称 | 描述 | 示例 | 结果 |
|---|---|---|---|---|
> | 大于 | 左侧值大于右侧值 | 5 > 3 | true |
< | 小于 | 左侧值小于右侧值 | 5 < 3 | false |
>= | 大于等于 | 左侧值大于或等于右侧值 | 5 >= 5 | true |
<= | 小于等于 | 左侧值小于或等于右侧值 | 5 <= 3 | false |
== | 等于 | 左侧值等于右侧值 | 5 == 5 | true |
!= | 不等于 | 左侧值不等于右侧值 | 5 != 3 | true |
关系运算符的使用
比较数值
java
public class RelationalOperatorsExample {
public static void main(String[] args) {
int a = 10;
int b = 5;
int c = 10;
// 大于
System.out.println("a > b: " + (a > b)); // 输出 true
// 小于
System.out.println("a < b: " + (a < b)); // 输出 false
// 大于等于
System.out.println("a >= c: " + (a >= c)); // 输出 true
// 小于等于
System.out.println("a <= b: " + (a <= b)); // 输出 false
// 等于
System.out.println("a == c: " + (a == c)); // 输出 true
// 不等于
System.out.println("a != b: " + (a != b)); // 输出 true
}
}比较字符
字符的比较是基于它们的 ASCII 值。
java
public class CharComparisonExample {
public static void main(String[] args) {
char ch1 = 'A'; // ASCII 值为 65
char ch2 = 'B'; // ASCII 值为 66
char ch3 = 'A'; // ASCII 值为 65
System.out.println("ch1 > ch2: " + (ch1 > ch2)); // 输出 false
System.out.println("ch1 < ch2: " + (ch1 < ch2)); // 输出 true
System.out.println("ch1 == ch3: " + (ch1 == ch3)); // 输出 true
System.out.println("ch1 != ch2: " + (ch1 != ch2)); // 输出 true
}
}比较浮点数
浮点数的比较需要注意精度问题。
java
public class FloatComparisonExample {
public static void main(String[] args) {
double d1 = 0.1 + 0.2;
double d2 = 0.3;
System.out.println("d1: " + d1); // 输出 0.30000000000000004
System.out.println("d2: " + d2); // 输出 0.3
System.out.println("d1 == d2: " + (d1 == d2)); // 输出 false
// 正确的比较方式
double epsilon = 1e-10;
System.out.println("Math.abs(d1 - d2) < epsilon: " + (Math.abs(d1 - d2) < epsilon)); // 输出 true
}
}关系运算符的优先级
关系运算符的优先级高于赋值运算符,但低于算术运算符。
示例
java
public class RelationalPrecedenceExample {
public static void main(String[] args) {
int a = 10;
int b = 5;
int c = 3;
// 先计算算术运算,再进行关系比较
boolean result1 = a + b > c * 2; // 先计算 a + b 和 c * 2,再比较
System.out.println("a + b > c * 2: " + result1); // 输出 true
// 使用括号改变优先级
boolean result2 = (a + b) > (c * 2); // 与上面等效
System.out.println("(a + b) > (c * 2): " + result2); // 输出 true
}
}关系运算符的应用
1. 条件判断
java
int age = 18;
if (age >= 18) {
System.out.println("You are an adult.");
} else {
System.out.println("You are a minor.");
}2. 排序
java
int a = 10;
int b = 5;
if (a > b) {
System.out.println("a is greater than b");
} else if (a < b) {
System.out.println("a is less than b");
} else {
System.out.println("a is equal to b");
}3. 范围检查
java
int score = 85;
if (score >= 90) {
System.out.println("Grade: A");
} else if (score >= 80) {
System.out.println("Grade: B");
} else if (score >= 70) {
System.out.println("Grade: C");
} else {
System.out.println("Grade: D");
}示例:关系运算符的使用
java
public class RelationalApplication {
public static void main(String[] args) {
// 比较整数
int num1 = 100;
int num2 = 200;
System.out.println("num1 > num2: " + (num1 > num2));
System.out.println("num1 < num2: " + (num1 < num2));
System.out.println("num1 == num2: " + (num1 == num2));
// 比较浮点数
double price1 = 9.99;
double price2 = 19.99;
System.out.println("price1 >= price2: " + (price1 >= price2));
System.out.println("price1 <= price2: " + (price1 <= price2));
// 比较字符
char grade1 = 'A';
char grade2 = 'B';
System.out.println("grade1 == grade2: " + (grade1 == grade2));
System.out.println("grade1 != grade2: " + (grade1 != grade2));
// 范围检查
int age = 25;
if (age >= 18 && age < 65) {
System.out.println("You are of working age.");
} else if (age < 18) {
System.out.println("You are a minor.");
} else {
System.out.println("You are a senior citizen.");
}
}
}常见问题
1. 等于运算符与赋值运算符的混淆
症状:使用 = 而不是 == 来比较值
解决方案:记住 == 是等于运算符,= 是赋值运算符
2. 浮点数比较的精度问题
症状:0.1 + 0.2 == 0.3 返回 false
解决方案:使用 Math.abs() 来比较浮点数的差值是否小于一个很小的数
3. 对象比较
症状:使用 == 比较对象,结果不符合预期
解决方案:对于对象,使用 equals() 方法来比较内容,而不是 == 运算符
总结
关系运算符是 Java 中用于比较两个值之间关系的工具,包括:
- 大于
> - 小于
< - 大于等于
>= - 小于等于
<= - 等于
== - 不等于
!=
关系运算符返回一个布尔值(true 或 false),常用于条件判断、排序和范围检查等场景。在使用关系运算符时,需要注意浮点数的精度问题和对象的比较方法。
