运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符(不常用)
- 三元运算符
算术运算符
+ 正号 - 负号
+ - * / %
++自增 分为++a 和 a++
--自减 分为--a 和 a--
+ 字符串连接符
注意
- 除法运算
/
int result = 12 / 5; // result = 2
int result = 12 / 5 * 2; //result = 10
double result = 12 / 5 + 0.0; //result = 2.0
double result = (double)(12 / 5); //result = 2.0
double result = (double)12 / 5; //reslut = 2.4
double result = 12 / (5 + 0.0); //result = 2.4
- 取模运算
%
int result = 12 % 5;// result = 2
int result = -12 % 5;// result = -2
int result = 12 % -5;// result = 2
int result = -12 % -5;// result = -2
结论:
取模运算结果的符号与被模数的符号相同。被模数是正号,结果为正号,被模数为负号,结果为负号。
- 在编程过程中,如果想要给byte,short,char类型变量
+1或者-1,最好使用++或者--。因为++或者--运算不会改变变量本身的数据类型。
short a = 10;
a = a + 1; //错误,返回结果为int类型,把int类型的值赋给short类型的变量会报错报错,编译不通过
++a; //正确 a = 11
特例:
byte b1 = 127;
++b1; // b1 = -128 这个可以根据底层的01存储分析可得,注意计算机底层使用**补码**的方式对数值存储的
简单分析题:
int n = 10;
n += (n++) + (++n);
n 的结果是 32;
分析:上述可以理解为
n = n + (n++) + (++n);
n = 10 + 10(此处n把10返回,然后自增1, n = 11) + 12(先增1, 然后再返回n = 12);
n = 10 + 10 + 12; // 32
赋值运算符
= += -= *= /= %=
注意
- 当
=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。 - 支持连续赋值。举例:
i = j = 10;int i = j = 10; - 上述6种赋值运算符,都不会改变变量本身的数据类型。
short b1 = 10;
b1 += 10;
b1 = b1 + 10;//右侧返回结果为int型,int型不能赋值为short型变量。
关系运算符
> < == != >= <= instanceof
结论:
- 比较运算符的结果都是boolean类型,要么为true,要么为false;
><>=<=: 只能使用在数值型的数据之间做关系运算。==和!=:不仅可以使用在数值型数据 变量之间,还可以使用在其他引用类型变量之间。
注意:
==不要误写成=;
逻辑运算符
& && | || ! ^(异或)
注意:
-
&和&&:
&左边无论真假,右边都进行运算。
&&如果左边为真,右边参与运算,如果左边为假,右边不参与运算。(惰性)- 不论是
&和&&两者的运算结果都相同。 - 当
&或者&&左边为true时,右边都参与运算。
- 不论是
&和&&的不同点: 当运算符左侧为false时,&会继续执行符号右侧的运算,&&不会执行符号右侧的运算,直接短路。
|和||:
|左边无论真假,右边都进行运算。
||如果左边为假,右边参与运算,如果左边为真,右边不参与运算。(惰性)- 不论是
|和||两者的运算结果都相同。 - 当
|或者||左边为false时,右边都参与运算。
- 不论是
|和||的不同点:当符号左侧为true时,|会继续执行符号右侧的运算,||不会执行符号右侧的运算,直接短路。
位运算符
>> << >>> & | ~(位非) ^(位异或)
总结:
- 位运算符的操作对象都是整型变量或者常量。
<<在一定范围内,每向左移1位,相当于乘2,空位拿0填充。>>在一定范围内,每向右移1位,相当于除2,空位拿符号位填充。>>>: 无符号右移,空位拿0填充。&|~^这几个位运算符在运算过程中,也会对符号位进行操作。
注意:
如何区分&为逻辑运算符还是位运算符?
& 如果符号两侧运算符是boolean对象,则该运算符是逻辑运算符;
& 如果符号两侧运算符对象是整型变量或者常量对象,则该运算符为位运算符。
三元运算符
判断条件 ? 表达式1 : 表达式2
判断条件为true时,执行表达式1;
判断条件为false时,执行表达式2;
总结:
- 三元运算符可以嵌套使用。
- 三元运算符结构的程序一定可改写为
if-else结构,但是if-else结构不一定能改写为三元运算符结构。 - 如果程序既可以使用三元运算符,又可以使用if-else结构,那么直接使用三元运算符。简洁,运算效率高。
注意:
int max = 1 > 2 ? 1 : 2; //正确
1 > 2 ? 1 : 2; //错误。必须将结果赋给某个对象。这也是为什么if-else不一定能改写为三元运算符的原因。
举例:
1 > 2 ? 1 : "2大"; //三元运算符不成立。返回结果没有办法赋值给统一的一个对象。
运算符优先级
没有必要刻意背诵优先级关系,如果在编程过程中不确定运算符好的优先级关系,可以使用
()来改变运算顺序。
381

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



