Java运算符
按照优先级由高到低可以分为分隔符,一元运算符,算术运算符,移位运算符,关系运算符,逻辑运算符,三目运算符,赋值运算符
分类 | 运算符 | 结合顺序 |
---|---|---|
分隔符 | . [] () ; , | 左结合 |
一元运算符 | ++ – - ~ | 右结合 |
算数运算符 | + - * / % | 左结合 |
移位运算符 | << >> >>> | 左结合 |
关系运算符 | < > <= >= instanceof(Java特有) == != | 左结合 |
逻辑运算符 | ! && || | 左结合 |
条件运算符 | 布尔表达式?表达式1:表达式2 | 右结合 |
赋值运算符 | = *= /= %= += -= >>= >>>= <<= &= |= ^= | 右结合 |
*[]: 左结合:从左往右依次进行运算
*[]: 右结合:从右往左依次进行运算
一.一元运算符
操作数只有一个,所以称为一元运算符
运算符 | 含义 |
---|---|
- | 取反 |
~ | 逐位取反 |
++ | 自加1 |
– | 自减1 |
! | 翻转操作数的逻辑状态 |
举例说明:
public static void main(String[] args) {
int a=10; //‘-’取反
int b=0;
b=-a;
System.out.println(a);
System.out.println(b);//输出结果a=10,b=-10
}
public static void main(String[] args) {
int a=10; //‘~’逐位取反
int b=0;
b=-a;
System.out.println(a);
System.out.println(b);//输出结果a=10,b=-11
//10的二进制表示为01010,逐位取反后是10101,相当于十进制的-11
}
public static void main(String[] args) {
int a=10; //‘++’自增1
int b=0;
b=a++;
System.out.println(a);
System.out.println(b);//输出结果a=11,b=10
}
public static void main(String[] args) {
int a=10; //‘--’自减1
int b=0;
b=a--
System.out.println(a);
System.out.println(b);//输出结果a=9,b=10
}
public static void main(String[] args) {
boolean a=false;
boolean b=true;
System.out.println(!a);//结果为true
System.out.println(!b);//结果为false
}
a++和++a:
int i=1,a=0;
- i++ 先赋值再运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1
- ++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2
二.算术运算符
又称二元运算符
运算符 | 含义 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
\ | 除法运算 |
% | 取模(求余)运算 |
举例说明:
public static void main(String[] args) {
int a=10;
int b=5;
float c=5.0f;
System.out.println(a*b);//结果50
System.out.println(a*c);//结果50.0
}
public static void main(String[] args) {
int a=10;
int b=4;
float c=4.0f;
System.out.println(a/b);//结果2
System.out.println(a/c);//结果2.0
}//当两个操作数类型不相同时,输出结果和精度较高的那个相同
数字可以自动从低精度转向高精度,但是从高精度转向低精度时存在损失
三.移位运算符
移位运算符是针对数的二进制形式进行操作
运算符 | 含义 |
---|---|
<< | 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) |
>> | "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. |
>>> | "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0. |
举例说明:
public static void main(String[] args) {
int a=10;
System.out.println(Integer.toBinaryString(a));//输出a的二进制形式,结果1010
System.out.println(Integer.toBinaryString(a>>3));//有符号右移三位,结果1
System.out.println(Integer.toBinaryString(a<<3));//左移三位,结果1010000
System.out.println(Integer.toBinaryString(a>>>3));//无符号右移三位,结果1
}
注:x<<y 相当于 x*2^y ;x>>y相当于x/2^y
从计算速度上讲,移位运算要比算术运算快。
四.关系运算符
关系运算符产生的结果都是布尔型(true,false)
< > <= >= instanceof(Java特有) == !=
运算符 | 含义 |
---|---|
> | 大于 |
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
public static void main(String[] args) {
int a=10;
int b=8;
System.out.println(a>b);//true
System.out.println(a>=b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
instanceof
用于判断一个引用类型所引用的对象是否是一个类的实例。操作符左边的操作元是一个引用类型,右边的操作元是一个类名或者接口,形式如下:
( Object reference variable ) instanceof (class/interface type)
public static void main(String[] args) {
String name="csdn";
boolean result=name instanceof String;
System.out.println(result);//结果true
}
注:“==”和“!=”既可以用于基本数据类型,也可以用于引用数据类型,当用于引用数据类型时,比较的是引用的内存地址,所以比较非基本数据类型时,应当使用equals方法
五.逻辑运算符
运算符 | 含义 |
---|---|
&& | 逻辑与运算符,当且仅当两个操作数都为真,条件才为真 |
|| | 逻辑或操作符,如果任何两个操作数任何一个为真,条件为真 |
! | 逻辑非运算符,用来反转操作数的逻辑状态。如果条件为false,则逻辑非运算符将得到true |
举例说明:
public static void main(String[] args) {
boolean a=true;
boolean b=false;
System.out.println(a&&b);//false
System.out.println(a||b);//true
System.out.println(!a);//false
System.out.println(!b);//true
}
六.条件运算符
条件运算符又被称为三元运算符,主要用来判断布尔表达式的值,并决定哪个值应该赋给变量。
variable x = (expression) ? value if true : value if false
举例说明:
public static void main(String[] args){
int a,b;
a=10;
//如果a=1成立,则b的值为20,不成立,b的值为30
b=(a==1) ? 20:30;
System.out.println( "Value of b is : " + b );//结果Value of b is :30
//如果a=10成立,b的值为20,不成立,b的值为30
b=(a==10) ? 20:30;
System.out.println( "Value of b is : " + b );//结果Value of b is :20
}
七.赋值运算符
运算符 | 含义 | 例子 |
---|---|---|
= | 将右边数的值赋给左侧 | a=b+c就是把b+c的和赋给a |
+= | 把左操作数和右操作数相加赋值给左操作数 | 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 |
<<= | 左移位赋值运算符 | a <<= 2等价于a =a<< 2 |
>>= | 右移位赋值运算符 | a >>= 2等价于a =a>> 2 |
&= | 按位与赋值运算符 | a &= 2等价于a =a&2 |
^= | 按位异或赋值操作符 | a ^ = 2等价于a =a^2 |
|= | 按位或赋值操作符 | a | = 2等价于a =a|2 |