什么是运算符
对常量和变量进行操作的符号称为运算符
思维导图
一、算数运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
算数运算符的基本用法:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % a = " + (c % a) );
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
// 查看 d++ 与 ++d 的不同
System.out.println("d++ = " + (d++) );
System.out.println("++d = " + (++d) );
}
}
//结果:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++ = 10
a-- = 11
d++ = 25
++d = 27
注意事项:
整数相除只能得到整数。如果想得到小数,请使用浮点数。
/
获取的是除法操作的商,%
获取的是除法操作的余数,%运算结果的符号,取决于参与运算是左边的符号。
++,–运算符的作用
自加(++)自减(–)运算
++:自加。对原有的数据进行+1
–:自减。对原有的数据进行-1
++,–运算符的基本用法:
public class Test{
public static void main(String[] args){
int a = 3;
int b = ++a;
int c = 3;
int d = --c;
System.out.println("b="+b);
System.out.println("d="+d);
}
}
//结果
b=4
d=2
单独使用:
放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
参与运算使用:
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
案例演示:
public class Test{
public static void main(String[] args){
int x = 4;
int y = (x++) + (++x) + (x*10);
System.out.println("x="+x);
System.out.println("y="+y);
}
}
//结果
x=6
y=70
二、赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
基本用法:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println("c = a + b = " + c );
c += a ;
System.out.println("c += a = " + c );
c -= a ;
System.out.println("c -= a = " + c );
c *= a ;
System.out.println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
System.out.println("c /= a = " + c );
a = 10;
c = 15;
c %= a ;
System.out.println("c %= a = " + c );
}
}
注意事项:
基本的赋值运算符:=
把=
右边的数据赋值给左边。
特殊的赋值运算符:+=,-=,*=,/=,%=
它们把左边和右边做相应的算术运算,然后赋值给左边。
赋值运算符要求左边的数据必须是一个变量
三、关系运算符
关系运算符用来比较两个值,包括大于>
、小于<
、大于等于>=
、小于等于<=
、等于==
、不等于!=
和instanceof
,关系运算符都是二元运算符,也就是每个运算符都带有两个操作数,运算的结果是一个逻辑值。
注意事项:
无论操作是简单还是复杂,关系运算符的结果是boolean类型。
==
不能写成=
。
instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
使用格式如下:
( Object reference variable ) instanceof (class/interface type)
代码示例:
String name = "aaa";
boolean result = name instanceof String;
// 由于 name 是 String 类型,所以返回真
四、逻辑运算符
逻辑运算符包括&(并且) , |(或者) , !(非) , ^(异或) , &&(逻辑与) , ||(逻辑或)。Java对逻辑与和逻辑或提供“短路”功能,也就是在进行运算时,先计算运算符左侧的表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的计算,否则计算运算符右侧表达式,并得到整个表达式的值。
逻辑运算符基本用法
(表达式A)(逻辑运算符)(表达式B)
注意事项
逻辑运算符一般用于连接boolean
类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6 ,不可以写成3<x<6
,应该写成 x>3 & x<6
。
结论
&
逻辑与:有false
则false
。
|
逻辑或:有true
则true
。
^
逻辑异或:相同为false
,不同为true
。
举例:情侣关系。男男,男女,女男,女女
!
逻辑非:非false
则true
,非true
则false
。
特点:偶数个不改变本身。
五、位运算符
位运算符用来对二进制位进行操作。位运算符有&(与),|(或),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)
注意事项:
位运算是直接对二进制补码进行运算(运算效率高)
代码示例:
public class Test {
public static void main(String[] args) {
int a = 60;
int b = 13;
int c = 0;
c = a & b;
System.out.println("a & b = " + c );
c = a | b;
System.out.println("a | b = " + c );
c = a ^ b;
System.out.println("a ^ b = " + c );
c = ~a;
System.out.println("~a = " + c );
c = a << 2;
System.out.println("a << 2 = " + c );
c = a >> 2;
System.out.println("a >> 2 = " + c );
c = a >>> 2;
System.out.println("a >>> 2 = " + c );
}
}
//结果
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
各运算符的运算规则
&
如果相对应位都是1,则结果为1,否则为0
|
如果相对应位都是 0,则结果为 0,否则为 1
^
如果相对应位值相同,则结果为0,否则为1
~
按位取反运算符翻转操作数的每一位,即0变成1,1变成0
<<
按位左移运算符。左操作数按位左移右操作数指定的位数
>>
按位右移运算符。左操作数按位右移右操作数指定的位数
>>>
按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充
运算过程:
正数的按位反:+9
原码:00001001
反码:00001001
补码:00001001
按位取反 1 1110110 补码
再推回原码
1 1110110 补码
- 1
-----------------------------
1 1110101 反码
取反
----------------------
1 0001010 原码
最后结果是: -10
结论
&
:有0则0
|
:有1则1
^
:相同则0,不同则1
~
:按位取反 0变1 1变0 符号位也包含在内取反
位异或运算符的特点
^的特点:一个数据被另一个数据位异或两次,该数本身不变
六、三元运算符
三元(三目)运算符的格式
(关系表达式) ? 表达式1 : 表达式2;
例: int a=(10>20)?30:50; a=50
三元运算符的执行流程
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;
案例演示:
class SYYSF{
public static void main(String[] args) {
int a=20;
int b=10;
int c=100;
int max=a>b?a:b;
System.out.println("最大值是:"+max);
max=max>c?max:c;
System.out.println("最大值是:"+max);
}
}
//结果
最大值是:20
最大值是:100