Java中常见的运算符
Java 语言支持如下运算符:
算术运算符: +,-,*,/,%,++,–
字符串连接运算符:+
关系(比较)运算符: >,<,>=,<=,==,!=
逻辑运算符: !,& , | , &&,||
赋值运算符: = ,+ =,- =,* =,/ =
条件运算符:(boolean达式)?(表达式1):(表达式2)
位运算符:<< , >> , >>>, & , | , ^ , ~
算数运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4; -b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
***** | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模 | 7%5 | 2 |
++ | 自增(前):先运算后取值 自增(后):先取值后运算 | a=2;b=++a;a=2;b=a++; | a=3;b=3a=3;b=2 |
- - | 自减(前):先运算后取值 自减(后):先取值后运算 | a=2;b=- -a;a=2;b=a- -; | a=1;b=1a=1;b=2 |
练习:
public static void main(String[] args){
int i1 = 10,i2 = 20;
int i = i1++;
System.out.print("i="+i);//10
System.out.println("i1="+i1);//11
i = ++i1;
System.out.print("i="+i);//12
System.out.println("i1="+i1);//12
i = i2--;
System.out.print("i="+i);//20
System.out.println("i2="+i2);//19
i = --i2;
System.out.print("i="+i);//18
System.out.println("i2="+i2);//18
}
比较运算符
运算符 | 运算 范例 结果 |
---|---|
== | 相等于 4==3 false |
!= | 不等于 4!=3 true |
< | 小于 4<3 false |
> | 大于 4>3 true |
<= | 小于等于 4<=3 false |
>= | 大于等于 4>=3 true |
instanceof | 检查是否是类的对象 “Hello” instanceof String true |
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注意:比较运算符“==”不能误写成“=” 。
逻辑运算符
逻辑运算符:
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
---|---|---|---|---|---|---|---|
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | true | false | false | false |
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
异或( ^ ):当左右都为true时,结果为false。
理解:异或,追求的是“异”!
赋值运算符
符号:=
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=
思考1:
short s = 3; // 3是int 但是虚拟机支持将int类型3赋给short,byte
s=s+2; //①s是short +2(int) 结果为int
s+=2; //②s=s+2
//①和②有什么区别?
运算符 | 用法举例 | 等效的表达式 |
---|---|---|
+= | a += b | a = a+b |
-= | a -= b | a = a-b |
*= | a *= b | a = a*b |
/= | a /= b | a = a/b |
%= | a %= b | a = a%b |
思考2:
boolean b1 = false;//区分好==和=的区别。
if(b1=true){
System.out.println("结果为真");
}else{
System.out.println("结果为假");
}
思考3:
int i = 1;
i *= 0.1; i=i*0.1 = 0
System.out.println(i);//0
i++;
System.out.println(i);//1
条件运算符
语法: (条件表达式)? 表达式1:表达式2;
为true,运算后的结果是表达式1;
为false,运算后的结果是表达式2;
表达式1和表达式2为同种类型
条件运算符与if-else的联系与区别:
1)条件运算符可简化if-else语句
2)条件运算符要求必须返回一个结果。
3)if后的代码块可有多个语句
位运算
日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.
位运算符 | 用法 |
---|---|
<< | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 |
>>> | 被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制位进行&运算,只有1&1时结果是1,否则是0 |
| | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1 |
^ | 相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1 |
~ | 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反 |
运算符优先级
表达式的运算顺序
1 |
| ~ | 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反 |
运算符优先级
表达式的运算顺序