按功能划分主要运算符如下:
& , | , ~ , ^ , >> , >>> , <<
& 按位与(真真为真,真假为假)
| 按位或 (假假为假,其余为真)
^ 按位异(相同为假,不同为真)
~ 按位非(真则假,假则真)
>> 右移
>>> 右移,左边空出的为以0填充
<< 左移
1、算数运算符
+ , - , * , / , % ,++ , --
* ++,-- 运算符
- 可以出现在变量前和变量后,无论出现在前还是后,只要运算符结束,该变量中的值一定会自加1或自减1。
- ++ , -- 出现在变量后,先做赋值运算,再对变量中保存的值进行自加1或自减1。
++ , -- 出现在变量前,先对变量中保存的值进行自加1或自减1,再做赋值运算。
2、关系运算符
< , <= , > , >= , == , !=
* = 是赋值运算符, == 是关系运算符,关系运算符的结果一定是布尔类型:true/false。
* 关系运算符的运算原理:
int a = 10;
int b = 10;
a > b 比较的时候,比较的是a中保存的10这个值和b中保存的10这个值的大小比较。
3、逻辑运算符
& 逻辑与, | 逻辑或, !, ^ , && 短路与, || 短路或
* 逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型。
* 短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象。
短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象。
- 逻辑与:
int x = 10; int y = 8; System.out.println( x < y & ++x < y); System.out.println(x);
输出结果为 false
11
- 短路与:
int x = 10; int y = 8; System.out.println( x < y && ++x < y); System.out.println(x);
输出结果为 false
10
x < y 结果是false,整个表达式结果已经确定是false,所有后面的表达式没有再执行,这种现象被称为短路现象,短路与才会有短路现象。
- 什么情况下会发生短路或,短路与?
第一个表达式执行结果是true,会发生短路或。
第一个表达式执行结果是false,会发生短路与。
4、赋值类运算符
基本的赋值运算符 =
扩展的赋值运算符 += -= *= /= %=
* 赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量。
* 注意以下代码:
byte i = 10;
i += 5; 等同于 i = (byte) (i+5);
结论:扩展类的赋值运算符不改变运算结果类型。假设最初这个变量的类型是byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型。
5、字符串连接运算符
+
* 当“+”运算符两边的数据都是数字的话,一定是进行加法运算。
当“+”运算符两边的数据只要有一个数据是字符串,一定会进行字符串连接运算,并且连接运算之后的结果还是一个字符串类型。
简单来说:数字 + 数字 ——> 数字 (求和)
数字 + “字符串” ——> “字符串” (字符串连接)
* 在一个表达式当作可以出现多个“+”,在没有添加小括号的情况下,遵循自左向右的顺序依次运算。
6、三元运算符/三目运算符/条件运算符
* 语法规则:
布尔表达式 ? 表达式1: 表达式2
* 三元运算符的执行原理:
当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。
当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)