算术运算符 | 一元运算符 | ++,-- |
---|---|---|
二元运算符 | +,-,*,/,% | |
赋值运算符 | = | |
扩展运算符 | +=,-=,*=,/= | |
关系运算符 | >,<,>=,<=,==,!=,instanceof | |
逻辑运算符 | &&,||,!,^ | |
位运算符 | &,|,^,~,>>,<<,>>> | |
条件运算符 | ? : | |
字符串连接符 | + |
1、一元运算符
算数运算符中++,--属于一元运算符, 该类运算符只需要一个操作数。
1、无论是++还是--,每次运算量为1。
2、运算符在前面++a;先运算,再赋值。
3、运算符在后面a++;先赋值,再运算。
//++ -- 自增,自减 一元运算符
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,再自增
// a = a+1
System.out.println(a);//4
// a = a+1
int c = ++a;//执行这段代码前,先自增,再给c赋值
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
System.out.println((a++)+(++b));//5+4 9
//幂运算 2^3 2*2*2=8
//很多运算我们会使用一些工具类来操作
double pow = Math.pow(2, 3);
//返回值快捷键 alt + Enter
System.out.println(pow);//8.0
2、二元运算符
算数运算符中+,-,*,/,%属于二元运算符, 二元运算符指的是需要两个操作数才能完成运算的运算符,其中%是取模运算符,就是我们常说的求余数操作。
二元运算符的运算规则
整数运算:
1、如果两个操作数有一个为long,则结果也为long.
2、没有long时,结果为int。即使操作数全为short,byte,结果也为int。
浮点运算:
1、如果两个操作数有一个为double,则结果为double。
2、只有两个操作数都是float,则结果为float。
取模运算:
1、其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:10%3=1,-11%3=-2;11%-3=2
//二元运算符
//Ctrl + D :复制当前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);//30
System.out.println(a-b);//-10
System.out.println(a*b);//200
System.out.println(a/(double)b);//0.5
long a = 12345678912L;
int b = 122;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d);//long类型 12345679052
System.out.println(b+c+d);//int类型 140
System.out.println(c+d);//int类型 18
3、扩展运算符
扩展运算符 | ||
---|---|---|
运算符 | 用法举例 | 等效的表达式 |
+= | 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 |
int a = 10;
int b = 20;
a+=b;//a = a+b
a-=b;//a = a-b
System.out.println(a);
4、关系运算符
关系运算符用来比较运算,且运算的结果是布尔值:true/false
关系运算符 | ||
---|---|---|
运算符 | 含义 | 示例 |
== | 等于 | a==b |
!= | 不等于 | a!=b |
> | 大于 | a>b |
< | 小于 | a<b |
>= | 大于或者等于 | a>=b |
<= | 小于或者等于 | a<=b |
注意事项:
1、=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
2、==、!=是所有(基本和引用)数据类型都有可以使用。
3、>、>=、<、<=仅针对数值类型(byte、short、int、long、float、double。以及char)。
//关系运算符返回的结果: 正确 错误 布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println(c%a);// c/a 21/10 =2..........1 取余
5、逻辑运算符
逻辑运算的操作数和运算结果都是 boolean值。
逻辑运算符
运算符 说明
逻辑与 &(与) 两个操作数位true,结果才是true,否则是false
逻辑或 |(或) 两个操作数有一个true,结果就是true
短路与 &&(与) 只要有一个为false,则直接返回false
短路或 ||(或) 只要有一个为true,则直接返回true
逻辑非 !(非) 取反:!false为true,!true为false
逻辑异或 ^(异或) 相同为false,不同为true
// 与(&&)and 或(||) or 非(!)取反
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b));// a && b:false
//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b:"+(a||b));// a || b:true
//逻辑或运算,两个变量有一个为真,则结果才为true
System.out.println("!(a && b):"+!(a&&b));// !(a && b):true
//逻辑非运算:取反 真变为假 假变为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
//与运算中,若第一个条件已经判断为假,则后续条件不执行
System.out.println(d);//false
System.out.println(c);//5
6、位运算符
A = 0011 1100 B = 0000 1101 ----------------------------- A&B = 0000 1100 与 A|B = 0011 1101 或 A^B = 0011 0001 异或 ~B = 1111 0010 取反 2*8 = 16 2*2*2*2 效率极高 << *2 >> /2 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16
System.out.println(2<<3);
涉及Java面试题:int a=2*8怎样运算效率最快?
用移位运算 int a=2<<3;
2的二进制是10 在32位存储器里面是0000 0000 0000 0010
左移三位后变成 0000 0000 0001 0000 也就是16
解释一下,在系统中运算是以二进制的形式进行的。相比来说俩个二进制数相乘运算比移位运算慢一些。位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)
7、条件运算符
语法格式:x?y:z
其中x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则,整个运算的结果为表达式z的值。
//x ? y :z
//如果x==true,则结果为y,否则结果为z
int score = 60;
String type = score < 60 ? "不及格": "及格";
System.out.println(type);
8、字符串连接符
"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
空字符串" "为String类型
String A = "3";
int B = 4;
int C = 5;
System.out.print("A+B+C=");
System.out.println(A+B+C); //A+B+C="3"+4+5="34"+5="345"
System.out.print("B+C+A="+(B+C+A));//B+C+A=4+5+"3"=9+"3"="93"
System.out.println("\n");
//字符串连接符 + ,String
System.out.println(""+B+C);//45
System.out.println(B+C+"");//9