(一)算术运算符
+ 求和
- 相减
* 乘积
/ 商
% 求余数(取模)
++ 自加1
-- 自减1
注意:
一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升
public class OperatorTest{
public static void main(String[] args){
int i = 10;
int flag = i%2;
if(flag==0){
System.out.println(i+"是偶数");
}else{
System.out.println(i+"是奇数");
}
//【自增/自减】
int x = 99;
x++;
System.out.println(x);//100
int y = 88;
++y;
System.out.println(y);//89
/*
①++出现在变量后:
规则:先做赋值运算,再对变量中保存的值进行自加1
②++出现在变量前:
规则:先
*/
int a = 100;
int b = a++;
System.out.println(a);//101
System.out.println(b);//100
int m = 20;
int n = ++m;
System.out.println(m);//21
System.out.println(n);//21
/*
println(k++)和println(++h)调用了源码:
public void println(int x) {
synchronized (this) {
print(x);
newLine();
}
}
调用了println(int x)的源码将k++和++h赋值给了x
*/
int k = 10;
System.out.println(k++);//10
int h = 10;
System.out.println(++h);//11
}
}
(二)、关系运算符
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
关系运算符的结果一定是布尔类型:true/false
(三)、逻辑运算符
& 逻辑与【并且】(两边的算子都是true,结果才是true)
| 逻辑或【或者】(两边的算子只要有一个是true,结果是true)
! 逻辑非(取反,!false就是true,!true就是false,这是一个单目运算符)
^ 逻辑异或(两边的算子只要不一样,结果就是true,一真一假)
&& 短路与
|| 短路或
1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型
2、短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象
3、短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象
4、什么情况下会发生短路现象呢?
1)发生短路与的情况:
第一个表达式执行结果为false,会发生短路与
2)发生短路或的情况:
第一个表达式执行结果为true,会发生短路或
5、什么时候选择使用逻辑与运算符?什么时候选择使用短路与运算符?
1)选择逻辑与的情况:
在某些业务场景下,要求运算符两边的算子必须全部执行,使用逻辑与
2)选择短路与的情况:
短路与更智能,后面的表达式被短路可能不执行,所以执行效率较高,实际开发中使用较高
public class OperatorTest{
public static void main(String[] args){
int x = 10;
int y = 8;
//逻辑与
System.out.println( x < y & ++x > y);//false
System.out.println(x); //11
//短路与
int m = 100;
int n =90;
System.out.println( m < n && ++m > n);//false
System.out.println(m);//100
}
}
(四)赋值运算符
=,+=,-=,*=,/=,%=
public class OperatorTest{
public static void main(String[] args){
int a = 100;
a %= 3;
System.out.println("a取余运算后的结果为:"+'\t'+a);//a取余运算后的结果为: 1
}
}
(五)字符串连接运算符
+
(六)位运算符
& 按位与(AND)[真真为真,真假为假]
| 按位或(OR)[假假为假,其余全真]
^ 按位异[相同为假,不同为真]
~ 按位非(NOT)[真则假,假则真]
>> 右移
>>> 右移,左边空出的位用0填充
<< 左移
public class OperatorTest{
public static void main(String[] args){
int num1 = 1024;
for(int i=0;i<=10;i++){
int af_rigth_move = 0;
af_rigth_move = num1>>i;
System.out.println("num1右移第"+i+"次后的结果为:"+af_rigth_move+"="+"1024/(2^"+i+")");
}
/*
num1右移第0次后的结果为:1024=1024/(2^0)
num1右移第1次后的结果为:512=1024/(2^1)
num1右移第2次后的结果为:256=1024/(2^2)
num1右移第3次后的结果为:128=1024/(2^3)
num1右移第4次后的结果为:64=1024/(2^4)
num1右移第5次后的结果为:32=1024/(2^5)
num1右移第6次后的结果为:16=1024/(2^6)
num1右移第7次后的结果为:8=1024/(2^7)
num1右移第8次后的结果为:4=1024/(2^8)
num1右移第9次后的结果为:2=1024/(2^9)
num1右移第10次后的结果为:1=1024/(2^10)
*/
int num2 = 1;
for(int i=0;i<=10;i++){
int af_rigth_move = 0;
af_rigth_move = num2<<i;
System.out.println("num左移第"+i+"次后的结果为:"+af_rigth_move+"="+"1*(2^"+i+")");
}
/*
num左移第0次后的结果为:1=1*(2^0)
num左移第1次后的结果为:2=1*(2^1)
num左移第2次后的结果为:4=1*(2^2)
num左移第3次后的结果为:8=1*(2^3)
num左移第4次后的结果为:16=1*(2^4)
num左移第5次后的结果为:32=1*(2^5)
num左移第6次后的结果为:64=1*(2^6)
num左移第7次后的结果为:128=1*(2^7)
num左移第8次后的结果为:256=1*(2^8)
num左移第9次后的结果为:512=1*(2^9)
num左移第10次后的结果为:1024=1*(2^10)
*/
}
}
(七)条件运算符【又称三目运算符】
1、语法规则:
布尔表达式?表达式1:表达式2
public class Test{
public static void main(String[] args){
sex = false;
char c = sex ? '男' : '女';
System.out.println(c);
/*
语法错误,编译报错,结果可能是String,也可能是char,但是前边不能用char来接收数据
类型不兼容
sex = true;
char c1 = sex ? '男' : '女';
*/
}
}