Day 09
Java 语言支持如下运算符: 算术运算符: +, -, *, /, %, ++, -- 赋值运算符: = 关系运算符: >, <, >=, <=, ==, != instanceof 逻辑运算符: &&,||, ! 位运算符: &,|,^,>> , <<, >>> (了解!!!) 条件运算符 ? : 扩展赋值运算符: +=,-=, *=, /=
算术运算符
一元运算符
运 算 符 | 名 称 | 说 明 | 例 子 |
- |
取反符号 |
取反运算 |
b=-a |
++ |
自加一 |
先取值再加一,或先加一再取值 |
a++ 或 ++a |
-- |
自减一 |
先取值再减一,或先减一再取值 |
a-- 或 --a |
package operator;
public class Demon3 {
public static void main(String[] args) {
// ++自增 --自减 一元
int a = 3;
int b = a++;//先取值再加一:将 a的值先使用(先给b赋值)再加 1 赋值给 a 变量本身
System.out.println(a);//a=4
System.out.println(b);//b=3
int c = ++a;//先加一再取值:先加一再取值:将 a的值先加 1,赋值给变量 a本身后再使用.先自增再赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算
double pow = Math.pow(2,3);//2^3
System.out.println(pow);
}
}
二元运算符
运 算 符 | 名 称 | 说 明 | 例 子 |
+ |
加 |
求 a 加 b 的和,还可用于 String 类型,进行字符串连接操作 |
a + b |
- |
减 |
求 a 减 b 的差 |
a - b |
* |
乘 |
求 a 乘以 b 的积 |
a * b |
/ |
除 |
求 a 除以 b 的商 |
a / b |
% |
取余 |
求 a 除以 b 的余数 |
a % b |
package operator;
import sun.util.resources.cldr.ta.TimeZoneNames_ta;
public class Demon01 {
public static void main(String[] args) {
//二元运算符
int a =10;
int b =20;
int c =25;
int d =25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);// int为整数,所以结果为0
System.out.println(a/(double)b);
//=========================================================
//=========================================================
//拓展,有long取long,没long取int
long x1 = 31313131231231l;
int x2 = 123;
short x3 = 10;
byte x4 = 8;
System.out.println(x1+x2+x3+x4);//long
System.out.println(x2+x3+x4);//int
System.out.println(x3+x4);//int
System.out.println(x1+x4);//long
}
}
三元运算符
package operator;
// 三元运算符
public class Demon7 {
/*
x ? y : z
如果x==true,则结果为y,否则结果为z
*/
public static void main(String[] args) {
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
}
}
关系运算符
关系运算符(relational operators)也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
运算符 | 含义 | 说明 | 实例 | 结果 |
> |
大于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true。 |
2>3 |
false |
>= |
大于或等于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 |
4>=2 |
true |
< |
小于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。 |
2<3 |
true |
<= |
小于或等于运算符 |
只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。 |
4<=2 |
false |
== |
相等运算符 |
如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java 也支持两个 boolean 类型的值进行比较。 |
4==4 97=='a' 5.0==5 true==false |
true true true false |
!= |
不相等运算符 |
如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 |
4!=2 |
true |
package operator;
public class Demon2 {
//关系运算符,返回结果 布尔值
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a!=b);
System.out.println(c%a);// 21/20=2...1
}
}
逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。
运算符 | 用法 | 含义 | 说明 | 实例 | 结果 |
&& |
a&&b |
短路与 |
ab 全为 true 时,计算结果为 true,否则为 false。 |
2>1&&3<4 |
true |
|| |
a||b |
短路或 |
ab 全为 false 时,计算结果为 false,否则为 true。 |
2<1||3>4 |
false |
! |
!a |
逻辑非 |
a 为 true 时,值为 false,a 为 false 时,值为 true |
!(2>4) |
true |
| |
a|b |
逻辑或 |
ab 全为 false 时,计算结果为 false,否则为 true |
1>2|3>5 |
false |
& |
a&b |
逻辑与 |
ab 全为 true 时,计算结果为 true,否则为 false |
1<2&3<5 |
true |
package operator;
public class Demon4 {
// 逻辑运算符
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a||b:"+(a||b));//逻辑与运算:两个变量有一个为真,结果true
System.out.println("!(a&&b):"+!(a&&b));//逻辑与运算:变假为真,变真为假
//拓展:短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(c);//c=5,因为c<4已经是false,所以无需继续运算
System.out.println(d);
int c1 = 5;
boolean d1 = (c1++<4)&&(c1<4);
System.out.println(c1);
System.out.println(d1);
}
}
位运算符
位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。
运算符 | 含义 | 实例 | 结果 |
& |
按位进行与运算(AND) |
4 & 5 |
4 |
| |
按位进行或运算(OR) |
4 | 5 |
5 |
^ |
按位进行异或运算(XOR) |
4 ^ 5 |
1 |
~ |
按位进行取反运算(NOT) |
~ 4 |
-5 |
位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。
运算符 | 含义 | 实例 | 结果 |
» |
右移位运算符 |
8»1 |
4 |
« |
左移位运算符 |
9«2 |
36 |
package operator;
public class Demon5 {
/*
位运算
A= 0011 1100
B= 0000 1101
-------------------------------------------
A&B= 0000 1100
A|B= 0011 1101
A^B= 0011 0001 相同为0,不相同为1
~B= 1111 0010
====================================
<< >>左移右移 效率高
<< *2
>> /2
------------------------------------------------------------
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
}
赋值运算符
运算符 | 含义 | 实例 | 结果 |
+= |
将该运算符左边的数值加上右边的数值, 其结果赋值给左边变量本身 |
int a=5; a+=2; |
a=7 |
-= |
将该运算符左边的数值减去右边的数值, 其结果赋值给左边变量本身 |
int a=5; a-=2; |
a=3 |
*= |
将该运算符左边的数值乘以右边的数值, 其结果赋值给左边变量本身 |
int a=5; a*=2; |
a=10 |
/= |
将该运算符左边的数值整除右边的数值, 其结果赋值给左边变量本身 |
int a=5; a/=2; |
a=2 |
%= |
将该运算符左边的数值除以右边的数值后取余,其结果赋值给左边变量本身 |
int a=5; a%=2; |
a=1 |
package operator;
public class Demon6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b;//a =a+b
a-=b;//a =a-b
System.out.println(a);
//字符串连接符+ + ,自动转换为String
System.out.println(""+a+b);// 1020, ""字符串在前,后面拼接
System.out.println(a+b+"");// 30 ""字符串在后,会先运算
}
}
Java运算符优先级
算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
优先级 | 运算符 | 结合性 |
1 |
()、[]、{} |
从左向右 |
2 |
!、+、-、~、++、-- |
从右向左 |
3 |
*、/、% |
从左向右 |
4 |
+、- |
从左向右 |
5 |
«、»、>>> |
从左向右 |
6 |
<、<=、>、>=、instanceof |
从左向右 |
7 |
==、!= |
从左向右 |
8 |
& |
从左向右 |
9 |
^ |
从左向右 |
10 |
| |
从左向右 |
11 |
&& |
从左向右 |
12 |
|| |
从左向右 |
13 |
?: |
从右向左 |
14 |
=、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= |
从右向左 |