1:运算顺序从左到右,赋值顺序从右到左。
2:单操作运算符,++(自动递增)、--(自动递减),+(取正)、-(取负)、~(按位取反)、!(逻辑取反)、()(造型)
a:自动递增,自动递减放前先加减在赋值,反之先赋值在加减
b:取正负和算数加减相同,编译器可根据上下文自动判断属于什么运算符
c:按位运算符对一个整数型操作数进行按位操作,生成与输入值相反,输入0则输出1。
d:逻辑运算对布尔类型进行取反操作
e:造型运算符用于强转类型
public static void main(String arr[]){
int x =1;
int y=++x;
System.out.println(x+"__"+y);
x =1;
int z=x++;
System.out.println(x+"__"+z);
x =1;
y=--x;
System.out.println(x+"__"+y);
x =1;
z=x--;
System.out.println(x+"__"+z);
x=1;
y=~x;
System.out.println(y);
boolean x_ = true;
boolean y_ = !x_;
System.out.println(y_);
x=1;
double t=(double)x;
System.out.println(t);
}
2__2
2__1
0__0
0__1
-2
false
1.0
3:算数运算符,+(加)、-(减)、*(乘)、/(除)、%(取模)
a:加减用于基本数据类型,运算结果数据溢出不会抛异常,会影响精度。+可以用作两个字符串链接。
b:乘运算用于基本数据类型,运算结果数据溢出不会抛异常,会影响精度。
c:除运算用于基本数据类型,除数为0,操作数中有一个浮点数输出Infinity,否则抛出异常 java.lang.ArithmeticException。
d:取模运算用于基本数据类型,除数为0,操作数中有一个浮点数输出NaN,否则抛出异常 java.lang.ArithmeticException。取模运算正负与被除数相同。
4:位移运算符,<<(左移位)、>>(右移位)、>>>(无符号右移位)
a:移位操作必须是整数型(字符型,字节型,短整型,整型,长整形),移位运算会将字符型,字节型,短整型转化为整形。
b:带符号左移位高位舍弃低位补0(相当于乘2)。带符号右移位低位舍弃高位补0或1(相当于除2)。无符号右移位低位舍弃高位补0。
public static void main(String arr[]){
//0000 0000 0000 0000 0000 0000 0000 0001
//00 0000 0000 0000 0000 0000 0000 000100
int y=1<<2;
System.out.println(y);
//0000 0000 0000 0000 0000 0000 0000 0101
//000000 0000 0000 0000 0000 0000 0000 01
y=5>>2;
System.out.println(y);
//最高位0为正 1为负 -1则为1000 0000 0000 0000 0000 0000 0000 0001
//补码:取反+1 0000 0000 0000 0000 0000 0000 0000 0001
//1111 1111 1111 1111 1111 1111 1111 1111
//0011 1111 1111 1111 1111 1111 1111 1111
y=-1>>>2;
System.out.println(y);
}
5:比较运算符:<(小于)、<=(小于等于)、>(大于)>=(大于等于)、==(等于)!=(不等于)
a:==,!= 判断的是对象的引用值即内存地址。
public static void main(String arr[]){
final String a="a";
String b ="b";
String c ="ab";
System.out.println(a+b==c);
}
false
6:按位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)
public static void main(String arr[]){
//0000 0000 0000 0000 0000 0000 0000 0001
int x=1;
//0000 0000 0000 0000 0000 0000 0000 0010
int y=2;
//两个操作数中位都为1,结果才为1,否则结果为0
//0000 0000 0000 0000 0000 0000 0000 0000
System.out.println(x&y);
//两个位只要有一个为1,那么结果就是1,否则就为0
//0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(x|y);
//如果位为0,结果是1,如果位为1,结果是0
//1111 1111 1111 1111 1111 1111 1111 1110
//取反+1 0000 0000 0000 0000 0000 0000 0000 0010
//1111 1111 1111 1111 1111 1111 1111 1101
//取反+1 0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(~x+"_"+~y);
//两个操作数的位中,相同则结果为0,不同则结果为1。
//0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(x^y);
}
0
3
-2_-3
3
7:逻辑运算符:&&(逻辑与)(两个操作都为true,运行结果为true)、||(逻辑或)(两个操作至少有一个为true,运行结果为true)、!(逻辑非)(生成与输入相反值),逻辑短路特性,&&是两边同时为真则为真,如果左边为假,右边不计算。 || 是只要有一边为真 结果就为真,左边为真,右边不计算。
8:条件运算符:?:(相当于一个简化版的if else)