1. Java运算符与表达式深度解析
作为一名Java开发者,掌握运算符和表达式的使用是基本功中的基本功。今天我将结合多年开发经验,带大家深入理解Java中的各种运算符及其应用场景。
1.1 运算符基础概念
运算符就是对常量或者变量进行操作的符号。比如我们最熟悉的加减乘除:+、-、*、/ 都是运算符。而表达式则是用运算符把常量或者变量连接起来的,符合Java语法的式子。
举个例子:
java复制int a = 10;
int b = 20;
int c = a + b; // a + b 就是一个表达式
这里有几个关键点需要注意:
- 运算符操作的对象可以是常量也可以是变量
- 表达式必须符合Java语法规则
- 表达式最终会产生一个结果值
1.2 算术运算符详解
算术运算符是我们最常用的运算符类型,包括:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取模 | a % b |
1.2.1 整数运算的特殊性
在Java中,整数参与运算时有一些需要特别注意的地方:
java复制int a = 10;
int b = 3;
System.out.println(a / b); // 输出3,不是3.333...
这是因为整数相除结果仍然是整数,小数部分会被直接舍弃。如果想要得到小数结果,必须有浮点数参与运算:
java复制System.out.println(a / 3.0); // 输出3.333...
注意:浮点数运算可能存在精度问题,比如0.1 + 0.2 不等于0.3,这是IEEE 754浮点数标准的特性,不是Java的bug。
1.2.2 取模运算的妙用
取模运算符(%)虽然看起来简单,但在实际开发中有很多巧妙的应用场景:
- 判断奇偶性:
java复制int num = 5;
if(num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
- 循环队列实现:
java复制int index = (currentIndex + 1) % queueSize;
- 数字拆分:
java复制int number = 123;
int units = number % 10; // 个位:3
int tens = number / 10 % 10; // 十位:2
int hundreds = number / 100; // 百位:1
1.3 类型转换机制
Java是强类型语言,不同类型的数据进行运算时需要进行类型转换。类型转换分为两种:
1.3.1 隐式转换(自动类型提升)
当取值范围小的类型与取值范围大的类型一起运算时,小的会自动提升为大的类型:
java复制int a = 10;
double b = 3.14;
double c = a + b; // a会自动转换为double类型
隐式转换规则:
- byte、short、char在运算时都会先提升为int
- 如果运算中有long,则提升为long
- 如果有float,提升为float
- 如果有double,提升为double
1.3.2 强制类型转换
当需要把大范围的类
