15.1 运算符概述
运算符也称为操作符(Operator),是对一个、两个或三个操作数(Operand)执行特定类型运算的符号,并且产生结果。
Java中的操作符可以按照不同的标准分为两类:
-
在操作数上的执行类型:对操作数进行数学运算,比较等操作的运算符
-
参与运算的操作数的数量可分为:
- 一元运算符(unary):只接受一个操作数的运算符
- 二元运算符(binary):接受两个个操作数的运算符
- 三元运算符(ternary):接受三个操作数的运算符
Java 支持很多的运算符,本专栏将讨论大部分 Java 运算符。在后面的专栏中,我们会在适当的场景讨论其中的几个。
目前我主要按照在操作数上的执行类型对运算符进行分类。
15.2 运算符分类
赋值运算符:=
算术运算符:+、-、*、/、%
自增自减运算符:++、–
比较运算符:==、!= 、>、<、>=、<=
逻辑运算符:&&、||、!
条件运算符:? :
位运算符:&、|、^、 ~、 <<、 >>、>>>
复合赋值运算符:+=、-=、*=、/=、%= 、&=、|=、^=、 <<= 、>>=、>>>=
类型判断运算符:instanceof
箭头运算符:->
方法引用运算符:::
其他运算符:,、()、[]、.
15.3 赋值运算符
赋值运算符(=)用于将值赋给变量。它是一个二元运算符。它需要两个操作数。它会从右向左运算,用于将右边的数据(可能来自字面量、变量、表达式或方法返回值)赋值给左边的变量。
1、声明变量时初始化数据
int num1 = 1;
int num2 = num1;
int num3 = num1 + 2;
2、将数据赋值给另一个变量,与声明变量时初始化数据类似,只是不需要变量声明的写法。
int num4;
num4 = 4;
num4 = num4 + 2;
Java 会确保赋值运算符右侧操作数的值与左侧操作数的数据类型赋值兼容;否则,将发生编译错误。比如,类型为 byte、short 和 char 的数据值与 int 数据类型是兼容的,因此以下代码片段是有效的:
byte b = 10;
char c = 'a';
short s = -100;
int i = 20;
i = b;
i = c;
i = s;
然而,long类型数据赋值给int类型变量与float/double浮点型赋值给int是不兼容的,因此以下这段代码片段在编译时会产生错误:
long big = 124L;
float f = 1.219F;
int i = 1;
i = big; // 编译错误
i = f;
当然我们应该知道这里可以使用强制类型转换的写法:
i = (int)big;
i = (int)f;
除了上述赋值的写法外,还有一种形式是连续赋值:
int num5, num6;
num5 = num6 = 100;
上述第2行代码可以理解为先计算右边的赋值表达式 num2 = 100,这会产生一个结果,即100;然后将这个产生的值赋值给左边的变量num1。
这样一来,我们可以在一个表达式中为多个变量赋相同的值。在这样的链式赋值表达式中,可以使用任意数量的变量。
15.4 赋值操作的一个注意点
看下面的代码片段:
int num7 = 100; // num7 是 100
int num8 = 200; // num8 是 200
num7 = num8; // num7 是 200. num8 是 200
num8 = 500; // num8 修改为 500
System.out.println(num7); // 那么num7 是多少呢?
当执行第3行 “num7 = num8” 这条语句时,存储在 num8中的值会被复制到 num7 中,而 num7 和 num8 都各自保留了相同的值(即 200)。接着第4行,当执行 “num8 = 500” 时,只有 num8 的值会变为 500,但 num7 的值仍保持不变,为 200。这是基本数据类型在存储时的特点决定的。而当这种赋值的写法应用于引用数据类型时,情况会有不同。
15.5 小结
本小节主要介绍了运算符的概念及分类,同时重点演示了赋值运算符的使用及注意事项。

被折叠的 条评论
为什么被折叠?



