**Java, Python, Go 运算符比较**
好的,这就将逻辑运算符添加到表格中:
| | | | |
| ---------------------- | ------------------------------ | ---------------------------- | ----------------------------------------- |
| **功能 (Function)** | **Java** | **Python** | **Go** |
| | | | |
| **比较运算符 (Comparison)** | | | |
| 等于 (Equal to) | `==` <br> (对象比较需用 `.equals()`) | `==` <br> (对象身份比较用 `is`) | `==` <br> (结构体比较字段, 指针比较地址, 接口比较类型和值) |
| 不等于 (Not equal to) | `!=` | `!=` <br> (对象身份比较用 `is not`) | `!=` |
| 大于 (Greater than) | `>` | | |
| 小于 (Less than) | `<` | | |
| 大于等于 (Greater or eq) | `>=` | | |
| 小于等于 (Less or eq) | `<=` | | |
| | | | |
| **算术运算符 (Arithmetic)** | | | |
| 加法 (Addition) | `+` | `+` | `+` |
| 减法 (Subtraction) | `-` | `-` | `-` |
| 乘法 (Multiplication) | `*` | `*` | `*` |
| 除法 (Division) | `/` <br> (整数相除为整数,否则为浮点数) | `/` <br> (结果总是浮点数,"真除法") | `/` <br> (整数相除为整数,否则为浮点数;不同类型需显式转换) |
| 取模/取余 (Modulus) | `%` | `%` <br> (结果符号与除数相同) | `%` <br> (仅用于整数) |
| 幂/指数 (Exponentiation) | `Math.pow(base, exp)` | `**` | `math.Pow(base, exp)` <br> (需导入 `math` 包) |
| 整除/向下取整 (Floor Div) | `/` <br> (当操作数都为整数时) | `//` | `/` <br> (当操作数都为整数时) |
| 自增 (Increment) | `++` <br> (前缀/后缀) | 无 (`+= 1`) | `++` <br> (仅作为语句,后缀) |
| 自减 (Decrement) | `--` <br> (前缀/后缀) | 无 (`-= 1`) | `--` <br> (仅作为语句,后缀) |
| | | | |
| **逻辑运算符 (Logical)** | | | |
| 逻辑与 (AND) | `&&` (短路) <br> `&` (非短路) | `and` (短路, 返回操作数之一) | `&&` (短路, 必须是 bool 类型) |
| 逻辑或 (OR) | ` | `(短路) <br>` | ` (非短路) |
| 逻辑非 (NOT) | `!` | `not` | `!` (必须是 bool 类型) |
**逻辑运算符补充说明:**
- **短路 (Short-circuiting):** 对于 `&&` (Java/Go) 和 `and` (Python),如果左侧表达式为假,则不再评估右侧表达式。对于 `||` (Java/Go) 和 `or` (Python),如果左侧表达式为真,则不再评估右侧表达式。Java 的 `&` 和 `|` 总是评估两侧。
- **Python 的 and/or 返回值:** Python 的 `and` 和 `or` 不一定返回 `True` 或 `False`。它们返回决定了最终结果的那个操作数的值(基于“真值”判断)。
- **Go 的类型严格性:** Go 的逻辑运算符 (`&&`, `||`, `!`) 只能作用于 `bool` 类型的值。
| | | | |
| ---------------------- | ------------------------------ | ---------------------------- | ----------------------------------------- |
| **功能 (Function)** | **Java** | **Python** | **Go** |
| **比较运算符 (Comparison)** | | | |
| 等于 (Equal to) | `==` <br> (对象比较需用 `.equals()`) | `==` <br> (对象身份比较用 `is`) | `==` <br> (结构体比较字段, 指针比较地址, 接口比较类型和值) |
| 不等于 (Not equal to) | `!=` | `!=` <br> (对象身份比较用 `is not`) | `!=` |
| 大于 (Greater than) | `>` | | |
| 小于 (Less than) | `<` | | |
| 大于等于 (Greater or eq) | `>=` | | |
| 小于等于 (Less or eq) | `<=` | | |
| | | | |
| **算术运算符 (Arithmetic)** | | | |
| 加法 (Addition) | `+` | | |
| 减法 (Subtraction) | `-` | | |
| 乘法 (Multiplication) | `*` | | |
| 除法 (Division) | `/` <br> (整数相除为整数,否则为浮点数) | `/` <br> (结果总是浮点数,"真除法") | `/` <br> (整数相除为整数,否则为浮点数;不同类型需显式转换) |
| 取模/取余 (Modulus) | `%` | `%` <br> (结果符号与除数相同) | `%` <br> (仅用于整数) |
| 幂/指数 (Exponentiation) | `Math.pow(base, exp)` | `**` | `math.Pow(base, exp)` <br> (需导入 `math` 包) |
| 整除/向下取整 (Floor Div) | `/` <br> (当操作数都为整数时) | `//` | `/` <br> (当操作数都为整数时) |
| 自增 (Increment) | `++` <br> (前缀/后缀) | 无 (`+= 1`) | `++` <br> (仅作为语句,后缀) |
| 自减 (Decrement) | `--` <br> (前缀/后缀) | 无 (`-= 1`) | `--` <br> (仅作为语句,后缀) |
**补充说明:**
- **Java:**
- `==` 对于基本类型比较值,对于对象比较引用(内存地址)。比较对象内容是否相等通常使用 `.equals()` 方法。
- 整数除法会截断小数部分。
- **Python:**
- `==` 比较值是否相等。`is` 比较两个变量是否引用同一个对象(内存地址)。
- `/` 执行“真除法”,结果总是浮点数。`//` 执行地板除法(向下取整)。
- 没有 `++` 或 `--` 运算符,需要使用 `x += 1` 或 `x -= 1`。
- **Go:**
- Go 是强类型语言,不同类型的数值(如 `int` 和 `float64`)不能直接进行算术运算,需要显式类型转换。
- `++` 和 `--` 只能作为独立的语句使用(例如 `i++`),不能作为表达式的一部分(例如 `x = i++` 是非法的)。它们只有后缀形式。
- 没有专门的幂运算符,需要使用 `math` 包中的 `Pow` 函数。
- 取模 `%` 运算符只能用于整数。