一、算术运算符:
单目:+(取正)-(取负) ++(自增1) - -(自减1)
双目:+ - * / %(取余)
三目:a>b?true:false 说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个表达式或者是值或者是对象。
二、关系运算:
等于符号:==,不等于符号: != ,大于符号:>, 小于符号:<,大于等于符号: >= ,小于等于符号: <= 。
三、位运算符 逻辑运算符:
位运算符 与(&)、非(~)、或(|)、异或(^)
&:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000
| :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110
~:0变1,1变0
^:两边的位不同时,结果为1,否则为0.如1100^1010=0110
逻辑运算符
与(&&)、非(!)、或(||)
b & 0xff,返回值是int类型,1位变四位,符号位跑到最前面那个字节了,所以可以把[-128,127]变为[0,255],
四、赋值运算符
= += -= *= /= %= &= ^= |= <<= >>=
五、instanceof运算符
该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算结果是true,否则是false。
六、 位移运算符--效率非常高,用于大数量的计算,String的数值,primitive date type 转换byte等
<< 带符号左移
>>带符号右移
>>> 无号右移,用于数据压缩等?
java基本数据类型都是有符号的,没有无符号的
public class Test {
public static void main( String[] args ) {
byte b = (byte) -8;
// -2
System.out.println( b >> 2 );
// 11111111111111111111111111111110
System.out.println( Integer.toBinaryString( b >> 2 ) );
// 1073741822
System.out.println( b >>> 2 );
// 111111111111111111111111111110
System.out.println( Integer.toBinaryString( b >>> 2 ) );
// -32
System.out.println( b << 2 );
// 11111111111111111111111111100000
System.out.println( Integer.toBinaryString( b << 2 ) );
// 255,
System.out.println( 0xff );
// 15
System.out.println( 0xff >> 4 );
// -255,
System.out.println( -0xff );
}
}
七、运算符优先级
从高到低:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op=
不必记优先级,尽量的使用括号来实现运算次序,提高程序可读性。