跳到主要内容

Java 运算符

什么是运算符?

在Java编程中,运算符是用于对变量和值进行操作的特殊符号。例如,加号(+)是一个运算符,用于将两个值相加。Java提供了多种类型的运算符来执行不同的操作。

运算符的类型

Java中的运算符可以分为以下几类:

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符
  6. 其他运算符

让我们详细了解每一种类型。

算术运算符

算术运算符用于执行基本的数学运算。

运算符描述示例
+加法A + B
-减法A - B
*乘法A * B
/除法A / B
%取模(求余)A % B
++自增A++ 或 ++A
--自减A-- 或 --A

示例代码

java
public class ArithmeticOperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 3;

// 基本算术运算
System.out.println("a + b = " + (a + b)); // 输出: 13
System.out.println("a - b = " + (a - b)); // 输出: 7
System.out.println("a * b = " + (a * b)); // 输出: 30
System.out.println("a / b = " + (a / b)); // 输出: 3 (整数除法)
System.out.println("a % b = " + (a % b)); // 输出: 1

// 自增和自减
int c = a++; // 先赋值再自增
System.out.println("c = " + c); // 输出: 10
System.out.println("a = " + a); // 输出: 11

int d = ++b; // 先自增再赋值
System.out.println("d = " + d); // 输出: 4
System.out.println("b = " + b); // 输出: 4
}
}
备注

在Java中,当使用/对两个整数进行除法运算时,结果也是整数(向下取整)。如果想要得到小数结果,至少要有一个操作数是浮点类型。

关系运算符

关系运算符用于比较两个值,返回的结果是布尔类型(truefalse)。

运算符描述示例
==等于A == B
!=不等于A != B
>大于A > B
<小于A < B
>=大于等于A >= B
<=小于等于A <= B

示例代码

java
public class RelationalOperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;

System.out.println("a == b 的结果是: " + (a == b)); // 输出: false
System.out.println("a != b 的结果是: " + (a != b)); // 输出: true
System.out.println("a > b 的结果是: " + (a > b)); // 输出: false
System.out.println("a < b 的结果是: " + (a < b)); // 输出: true
System.out.println("a >= b 的结果是: " + (a >= b)); // 输出: false
System.out.println("a <= b 的结果是: " + (a <= b)); // 输出: true
}
}
警告

在比较对象(而不是基本数据类型)时,==比较的是对象的引用(内存地址),而不是对象的内容。如果要比较对象的内容,应该使用equals()方法。

逻辑运算符

逻辑运算符用于组合多个条件,返回布尔值。

运算符描述示例
&&逻辑与A && B
||逻辑或A || B
!逻辑非!A

示例代码

java
public class LogicalOperatorDemo {
public static void main(String[] args) {
boolean a = true;
boolean b = false;

System.out.println("a && b = " + (a && b)); // 输出: false
System.out.println("a || b = " + (a || b)); // 输出: true
System.out.println("!a = " + (!a)); // 输出: false

// 短路运算示例
int x = 10;
int y = 20;

if (x > 5 || ++y > 20) { // 因为x > 5为true,所以后面的条件不会被执行
System.out.println("条件为真");
}
System.out.println("y = " + y); // 输出: 20,y没有自增
}
}
提示

&&||是短路运算符。在&&运算中,如果第一个条件为false,第二个条件不会被评估。在||运算中,如果第一个条件为true,第二个条件不会被评估。这可以用来避免可能的错误和提高效率。

位运算符

位运算符用于对二进制位进行操作。

运算符描述示例
&位与A & B
|位或A | B
^位异或A ^ B
~位取反~A
<<左移A << 2
>>右移(带符号)A >> 2
>>>右移(无符号)A >>> 2

示例代码

java
public class BitwiseOperatorDemo {
public static void main(String[] args) {
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011

System.out.println("a & b = " + (a & b)); // 输出: 1 (二进制: 0001)
System.out.println("a | b = " + (a | b)); // 输出: 7 (二进制: 0111)
System.out.println("a ^ b = " + (a ^ b)); // 输出: 6 (二进制: 0110)
System.out.println("~a = " + (~a)); // 输出: -6 (二进制: 1...1010)

System.out.println("a << 2 = " + (a << 2)); // 输出: 20 (二进制: 10100)
System.out.println("a >> 1 = " + (a >> 1)); // 输出: 2 (二进制: 0010)

int c = -5;
System.out.println("c >> 1 = " + (c >> 1)); // 输出: -3
System.out.println("c >>> 1 = " + (c >>> 1)); // 输出: 2147483645(无符号右移)
}
}

赋值运算符

赋值运算符用于给变量赋值。

运算符描述示例
=赋值C = A + B
+=加等于C += A 等价于 C = C + A
-=减等于C -= A 等价于 C = C - A
*=乘等于C *= A 等价于 C = C * A
/=除等于C /= A 等价于 C = C / A
%=取模等于C %= A 等价于 C = C % A
<<=左移等于C <<= 2 等价于 C = C << 2
>>=右移等于C >>= 2 等价于 C = C >> 2
&=位与等于C &= 2 等价于 C = C & 2
^=位异或等于C ^= 2 等价于 C = C ^ 2
|=位或等于C |= 2 等价于 C = C | 2

示例代码

java
public class AssignmentOperatorDemo {
public static void main(String[] args) {
int a = 10;

a += 5; // a = a + 5
System.out.println("a += 5: " + a); // 输出: 15

a -= 3; // a = a - 3
System.out.println("a -= 3: " + a); // 输出: 12

a *= 2; // a = a * 2
System.out.println("a *= 2: " + a); // 输出: 24

a /= 4; // a = a / 4
System.out.println("a /= 4: " + a); // 输出: 6

a %= 4; // a = a % 4
System.out.println("a %= 4: " + a); // 输出: 2
}
}

其他运算符

条件(三元)运算符

条件运算符是唯一需要三个操作数的运算符,格式为:条件 ? 表达式1 : 表达式2。 如果条件为真,则计算表达式1的值,否则计算表达式2的值。

java
public class TernaryOperatorDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;

int max = (a > b) ? a : b;
System.out.println("a和b中的较大值是: " + max); // 输出: 20

String result = (a % 2 == 0) ? "偶数" : "奇数";
System.out.println("a是: " + result); // 输出: 偶数
}
}

instanceof 运算符

instanceof 运算符用于检查对象是否是特定类型(类或接口)的实例。

java
public class InstanceofDemo {
public static void main(String[] args) {
String name = "Java编程";
boolean result = name instanceof String;
System.out.println("name是String类型: " + result); // 输出: true

Object obj = new String("测试");
System.out.println("obj是String类型: " + (obj instanceof String)); // 输出: true
System.out.println("obj是Object类型: " + (obj instanceof Object)); // 输出: true
}
}

运算符优先级

Java运算符的优先级从高到低排列如下:

  1. 后缀操作符:expr++, expr--
  2. 一元操作符:++expr, --expr, +expr, -expr, ~, !
  3. 乘法、除法、取模:*, /, %
  4. 加法、减法:+, -
  5. 移位操作符:<<, >>, >>>
  6. 关系操作符:<, >, <=, >=, instanceof
  7. 等价操作符:==, !=
  8. 位与:&
  9. 位异或:^
  10. 位或:|
  11. 逻辑与:&&
  12. 逻辑或:||
  13. 条件运算符:?:
  14. 赋值操作符:=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
提示

当你不确定运算符优先级时,可以使用括号来明确指定运算顺序。这不仅可以避免错误,也能提高代码的可读性。

实际案例

案例1:计算BMI值

使用运算符计算用户的Body Mass Index (BMI)。

java
import java.util.Scanner;

public class BMICalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("请输入您的体重(kg): ");
double weight = scanner.nextDouble();

System.out.print("请输入您的身高(m): ");
double height = scanner.nextDouble();

// 使用算术运算符计算BMI
double bmi = weight / (height * height);

System.out.println("您的BMI值为: " + bmi);

// 使用关系运算符和逻辑运算符判断BMI范围
if (bmi < 18.5) {
System.out.println("体重过轻");
} else if (bmi >= 18.5 && bmi < 24.9) {
System.out.println("正常范围");
} else if (bmi >= 24.9 && bmi < 29.9) {
System.out.println("超重");
} else {
System.out.println("肥胖");
}

scanner.close();
}
}

输出示例:

请输入您的体重(kg): 70
请输入您的身高(m): 1.75
您的BMI值为: 22.857142857142858
正常范围

案例2:简单计算器

创建一个支持基本运算的计算器。

java
import java.util.Scanner;

public class SimpleCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("请输入第一个数字: ");
double num1 = scanner.nextDouble();

System.out.print("请输入运算符 (+, -, *, /): ");
char operator = scanner.next().charAt(0);

System.out.print("请输入第二个数字: ");
double num2 = scanner.nextDouble();

double result = 0.0;

// 使用switch语句和算术运算符
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
// 使用条件运算符处理除数为零的情况
result = (num2 != 0) ? (num1 / num2) : 0;
if (num2 == 0) {
System.out.println("错误:除数不能为零");
scanner.close();
return;
}
break;
default:
System.out.println("不支持的运算符");
scanner.close();
return;
}

System.out.println(num1 + " " + operator + " " + num2 + " = " + result);
scanner.close();
}
}

输出示例:

请输入第一个数字: 10
请输入运算符 (+, -, *, /): *
请输入第二个数字: 5
10.0 * 5.0 = 50.0

总结

本文详细介绍了Java中的各种运算符,包括:

  1. 算术运算符:用于执行基本的数学运算。
  2. 关系运算符:用于比较两个值并返回布尔结果。
  3. 逻辑运算符:用于组合多个条件。
  4. 位运算符:用于对二进制位进行操作。
  5. 赋值运算符:用于给变量赋值。
  6. 其他运算符:如条件运算符和instanceof运算符。

运算符是Java编程的基础部分,掌握它们的用法和特点对于编写有效的代码至关重要。特别是要注意运算符的优先级,在复杂表达式中适当使用括号可以提高代码的可读性和准确性。

练习题

  1. 编写一个程序,使用算术运算符计算圆的面积和周长。
  2. 使用位运算符实现两个整数的交换(不使用临时变量)。
  3. 编写一个程序,使用关系运算符和逻辑运算符判断某年是否为闰年。
  4. 创建一个温度转换程序,使用条件运算符将摄氏度转换为华氏度,或者将华氏度转换为摄氏度。

进一步学习

  • Java运算符的高级应用
  • 位运算在实际项目中的应用场景
  • 表达式求值过程及优先级的深入理解