目录
概述
运算符 用于连接 表达式 的 操作数,并对操作数执行运算。 例如,表达式num1+num2,其操作数是num1和num2,运算符是”+”
Java语言支持如下运算符
在java语言中,运算符可分为5种类型:
-
算数运算符: +,-,*,/,%,++,--
-
赋值运算符: =
-
关系运算符: >, <, >=, <=, ==, !=, instanceof
-
逻辑运算符:&&, ||, !
-
位运算符:&, |, ^, ~, >>, <<, >>>
扩展:
-
条件运算符: ?, :
-
扩展赋值运算符:+=,-=,*=,/=
-
根据操作数的不同,运算符又分为3种
-
单目(元)运算符:单目运算符只有一个操作数
-
双目(元)运算符:双目运算符有两个操作数
-
三目(元)运算符:三目运算符则有三个操作数(条件运算符)
-
-
位运算符涉及到二进制位的运算,在java 程序中运用不是很多。
算数运算符
package poerator;
public class Basics07 {
public static void main(String[] args) {
//二元运算符
int a = 10;
int b = 20;
int c = 21;
System.out.println(a+b);// 30 + 相加
System.out.println(a-b);// -20 - 相减
System.out.println(a*b);// 200 * 相乘
System.out.println(a/b);//0 因为a/b 内存溢出了 所以为0
System.out.println(a/(double)b);//0.5 / 相除
System.out.println(c%a);//1 % 取余,模运算 c%a c/a=2.....1
}
}
算数运算符之自增 自减
-
一元运算符: ++ 自增 -- 自减
a++ 等价于: a=a+1;
package poerator;
public class Basics08 {
public static void main(String[] args) {
// a++ a=a+1;
//输出结果不同是因为时机不同
int a =1;
int b = a++;//执行完这行代码:
//先给b赋值
//b=a;//b=1;
//再自增
//a=a+1;//a=2
System.out.println(a);//2
System.out.println(b);//1
//a=a+1;
int c = ++a;//执行完这行代码
//先自增
//a=a+1;//3
//再给c赋值
//c=a;//3
System.out.println(a);//3
System.out.println(b);//1
System.out.println(c);//3
//幂运算 2^3=8
double pow=Math.pow(3,3);//幂运算
System.out.println(pow);
double w =Math.abs(-2);//绝对值
System.out.println(w);
}
}
关系运算符
关系运算符返回结果: 正确 错误 布尔型 同常跟if一起使用
package poerator;
public class Basics0703 {
public static void main(String[] args) {
// 关系运算符返回结果: 正确 错误 布尔型
// 同常跟if一起使用
int a =10;
int b =20;
System.out.println(a>b);//false a不大于b
System.out.println(a<b);//true a小于b
System.out.println(a==b);//false a不等于b
System.out.println(a!=b);//true a不等于b
int c =21;
}
}
逻辑运算符
&&(与) ||(或) !(非)
-
a&&b : 两个变量都为真,结果才为真;
-
a||b : 两个变量有一个为真,则结果为真
-
!(a&&b): 如果为真,则为假。如果为假,则为真
package poerator;
public class Basics09 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//false
System.out.println("a||b:"+(a||b));//true
System.out.println("!(a&&b):"+!(a&&b));//true
短路运算:
package poerator;
public class Basics09 {
public static void main(String[] args) {
int c =5;
boolean d = (c<4)&&(c++<4);// 因为逻辑与运算,只要有一个假就会输出结果:假 而当它得到c<4是假的,就不会去运行c++<4
System.out.println(d);//false
System.out.println(c);//5
int e = 5;
boolean f = (e>4)||(e--<4);// 因为逻辑或运算,只要有一个真就会输出结果:真 而当它得到c>4是真的,就不会去运行c--<4
System.out.println(e);//true // 俗称短路运算
System.out.println(f);//5
}
}
位运算符
& (与) |(或) ^(异或) ~(取反) <<(左移) >>(右移)
package poerator;
public class Basics0902 {
public static void main(String[] args) {
/* 位运算符 效率极高
& (与) |(或) ^(异或) ~(取反) <<(左移) >>(右移)
A = 0011 1100
B = 0000 1101
-----------------------------------------------------------------------------
A&B = 0000 1100 任何二进制和0进行&运算,结果为0;和1进行&运算,结果是原值
A|B = 0011 1101 任何二进制和0进行|运算,结果是原值;和1进行|运算,结果为1
A^B = 0011 0001 任何相同二进制进行^运算,结果为0;不相同进行^运算,结果为1
~B = 1111 0010
------------------------------------------------------------------------------
<< >> 引出面试题
面试题:2*8怎么运算最快 2*8=16 2*2*2*2=16
<< 数字 *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);//左移三位
}
}
扩展赋值运算符
package poerator;
public class Basics10 {
public static void main(String[] args) {
int a = 20;
int b = 10;
int c = a+=b;// a+=b a=a+b
int d = a-=b;// a-=b a=a-b
int e = a*=b;// a*=b a=a*b
int f = a/=b;// a/=b a=a/b
System.out.println(c);//30
System.out.println(d);//10
System.out.println(e);//200
System.out.println(f);//2
// 字符串连接符 + 当+两侧有String类型 这个+就会变成连接符,并且会把后面的+也变成连接符
System.out.println(""+a+b);
System.out.println(a+b+" "+a+b+":");
}
}
条件运算符(三元运算符)
package poerator;
public class Basics1002 {
public static void main(String[] args) {
// 三元运算符
// x ? y :z
//如果x==true,则结果为y,否则结果为z
int score =80;
String type = score >60 ? "及格" : "不及格";//必须掌握
System.out.println(type);//及格
}
}
运算符速查表
优先级控制
当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理