算术运算符和一元运算符
本节课将通过示例帮助你理解如何使用算术运算符和一元运算符。
章节背景
我们已经学习了一些重要的概念,例如如何将对象存储在字段中,如何命名字段(通过变量名),以及如何使用数组——一种可以存储多个元素或数据类型的容器对象。
现在的问题是,我们该如何使用这些内容?在许多情况下,我们通过赋值运算符(=)来为变量赋值或初始化。在给两个操作数赋值后,我们可以使用 + 符号将它们相加。通过使用这类符号,我们可以在一个或多个操作数上执行多种类型的操作。这些符号被称为运算符。在本章中,我们将探索各种运算符的使用方式,并了解它们在不同方面的差异。
算术运算符与一元运算符
算术运算符用于执行加法、减法、乘法和除法。在基础数学中,我们经常看到这些运算。唯一的新内容是取模运算,用 % 符号表示。通过该符号,我们可以将一个操作数除以另一个操作数,并返回余数作为结果。
编码示例:49
在下面的例子中,我们将看到算术运算符和一元运算符的工作原理。请阅读代码中的注释,你将理解这些运算符是如何工作的。
1public class ExampleFortyNine { 2 3 public static void main(String[] args) { 4 // 赋值运算符从右向左计算 5 // 数据类型的声明会分配内存 6 // 变量 x 存储值 10 7 int x = 10; 8 int y = 20; 9 // 算术运算符 -> +, -, *, /, % 10 int result = x + y; 11 System.out.println(result); 12 result = result - x; 13 System.out.println(result); 14 result = x * y; 15 System.out.println(result); 16 result = y / x; 17 System.out.println(result); 18 y = y - 1; 19 // 此时 y = 19 20 result = y % x; 21 // 余数为 9 22 System.out.println(result); 23 24 // 算术运算符可以连接字符串 25 String firstName = "John"; 26 String lastName = "Rambo"; 27 System.out.println(firstName + " " + lastName); 28 29 // 一元运算符只需要一个操作数 30 int a = +12; 31 // a 为正数 32 System.out.println(a); 33 a = -a; 34 // a 为负数 35 System.out.println(a); 36 a--; 37 // -12 - 1 = -13 38 System.out.println(a); 39 a++; 40 // -13 + 1 = -12 41 System.out.println(a); 42 } 43}
代码说明
我们没有单独讨论赋值运算符,因为它是最常用的。它从右向左计算。一旦声明了数据类型,就会分配内存。看这一行:
1int x = 10;
这意味着对象的字段名为 x,它是一个变量,存储值 10。这里的数据类型是 int,属于基本数据类型。
一元运算符的特点
一元运算符只需要一个操作数。它可以对操作数的值进行递增或递减,使变量值变为负数,还可以反转布尔值。
编码示例:50
在下面的例子中,我们将看到使用一元运算符的各种操作:
1public class ExampleFifty { 2 3 public static void main(String[] args) { 4 // 一元运算符可以是后缀或前缀 5 // 但它们之间存在区别 6 int x = 10; 7 // 后缀形式 8 x++; 9 // x = 11 10 System.out.println(x); 11 ++x; 12 // x = 12 13 System.out.println(x); 14 x--; 15 // x = 11 16 System.out.println(x); 17 --x; 18 // x = 10 19 System.out.println(x); 20 int a = 0; 21 a = x; 22 // a = 10 23 System.out.println(a); 24 a = x++; 25 // a = 10,不是 11,后缀形式(x++)返回原始值,即 10 26 // 尽管 x 的值已变为 11 27 System.out.println(a); 28 // 如果改为 a = x,则 a 会获得递增后的值 29 a = x; 30 // a 为 11 31 System.out.println(a); 32 a = ++x; 33 // a = 12,前缀形式(++x)返回递增后的值 34 System.out.println(a); 35 a = -a; 36 // a 现在为 -12 37 System.out.println(a); 38 39 boolean isTrue = false; 40 // false 41 System.out.println(isTrue); 42 // true 43 System.out.println(!isTrue); 44 } 45}
代码说明
阅读注释后,你将清楚地了解一元运算符的工作原理。
一元运算符的特殊性体现在递增和递减运算符上。后缀递增(a++)和前缀递增(++a)都会使操作数的值增加 1。在上面的代码中,请注意以下片段:
1 a = x; 2 // a = 10 3 System.out.println(a); 4 a = x++; 5 // a = 10,不是 11,后缀形式(x++)返回原始值,即 10 6 // 尽管 x 的值已变为 11 7 System.out.println(a); 8 // 如果改为 a = x,a 会获得递增后的值 9 a = x; 10 // a 为 11 11 System.out.println(a);
当涉及两个操作数时,后缀形式返回原始值;而如果使用前缀形式,则返回递增后的值。因此,在编写涉及两个操作数的代码时,必须仔细设计逻辑。