运算符
运算符:对数据进行运算的操作符
在Java中,针对运算符的操作数的多少,可以分成单目运算符,二目运算符,三目运算符。
表达式
表达式:由数据/变量/常量加上运算符组成的代码
a+b;
c=65535;
表达式可以对数据进行指定的运算,表达式还会有一个结果。
算术运算符
| 运算符 | 作用 | 示例 | 说明 |
|---|---|---|---|
| + | 1)加法 2)正号 3)字符串拼接 | 1)int sum=10=20; 2)表示正号 3)"Hello+“world”+sum | 1)对数值(除boolean)进行加法运算 |
| - | 1)减法 2)负号 | ||
| * | 乘法 | ||
| / | 除法 | 如果除数和被除数都是整数,结果也是整数 | |
| % | 取余、求余、求模 | 10%3=1 10.1%3.3=0.2 | 可以对整数,也可以对小数,还可以对负数 |
| ++ | 自增 | 对数值(除boolean)进行+1 | 前置:符号在前,变量在后,先进行自增运算,再计算表达式的值 后置:符号在后,变量在前,先计算表达式的值,在进行自增运算 |
| – | 自减 | 对数值(除boolean)进行-1 | 前置:符号在前,变量在后,先进行自减运算,再计算表达式的值 后置:符号在后,变量在前,先计算表达式的值,在进行自减运算 |
对求余运算的说明
-10%3=-1,
10%-3=1,
-10%-3=-1
所以对于负数求余,值决定与这两个数的绝对值,符号与第一个数的符号相同。
@Test
public void test4() {
int num1 = 3;
int num2 = 5;
int result = num1 + num2;
System.out.println(result); //8
System.out.println(8 / 2);//4
System.out.println(8 % 2);//0
System.out.println(8 / 5);//1
System.out.println(8 % 5);//3
}
++(自增1) --(自减1)
int i = 0;
i++; // i = i + 1;
i–; // i = i - 1;
++i; // i = i + 1
–i; // i = i - 1
@Test
public void test5(){
int i = 3;
i++;
System.out.println(i);//4
System.out.println(i++);//4
System.out.println(i);//5
System.out.println(++i);//6
}
+号运算符:
1、两边都是数字,则做的就是加法运算
2、若一边为字符串,则做的是字符串的拼接
@Test
public void test12() {
int age = 23;
System.out.println("我的年龄是" + age);
// 豆豆加加
System.out.println("我的年龄是" + age + "岁了");
System.out.println(10+20+""+30);//3030
System.out.println(""+10+20+30);//102030
}
比较运算符/关系运算符
| 运算符 | 结果 | 说明 |
|---|---|---|
| > | boolean | 只针对数值型 (除了boolean)的进行比较 |
| >= | boolean | 只针对数值型 (除了boolean)的进行比较 |
| < | boolean | 只针对数值型 (除了boolean)的进行比较 |
| <= | boolean | 只针对数值型 (除了boolean)的进行比较 |
| == | boolean | 可以对所有的数据类型进行比较,包括引用类型,当针对的是引用类型时,比较的是两个对象是否指向同一块时间 |
| != | boolean | 可以对所有的数据类型进行比较,包括引用类型,当针对的是引用类型时,比较的是两个对象是否指向同一块时间 |
@Test
public void test6() {
System.out.println(3 > 5);//false
System.out.println(5 <= 10);//true
}
逻辑运算符
| 运算符 | 名称 | 结果 | 过程 |
|---|---|---|---|
| &,&& | 逻辑与 | 只能针对布尔型,结果也是布尔值 | 都为true,才为true |
| ` | , | ` | |
| ! | 逻辑非 | 只能针对布尔型,结果也是布尔值 | true为false,false为true |
&&:两边的结果都是true,结果才是true
||:两边只要有一个是true,结果就是true
顺利毕业: true
1、平时成绩>60 boolean(true)
&& ||
2、四级成绩>400 boolean(true)
@Test
public void test7() {
int score1 = 67;
int score2 = 380;
boolean result1 = (score1 >= 60) && (score2 >= 400);
System.out.println(result1);//false
boolean result2 = (score1 >= 60) || (score2 >= 400);
System.out.println(result2);//true
}
短路运算:
针对&&,||在运算过程中,如果第一个表达式的值就已经可以确定整个运算的结果,这是第二个表达式将不再执行
@Test
public void test8() {
int num1 = 3;
int num2 = 5;
// &&短路
System.out.println(num1 < 0 && num1++ < num2);//false
System.out.println(num1);//3
System.out.println(num2);//5
// ||短路
System.out.println(num1 > 0 || num1++ < num2);//true
System.out.println(num1);//3
System.out.println(num2);//5
}
位运算符
| 运算符 | 名称 | 结果 | 说明 |
|---|---|---|---|
| & | 按位与 | 所有位运算都是在二进制的基础上进行的 | 对应位都为1,才为1 |
| ` | ` | 按位或 | 所有位运算都是在二进制的基础上进行的 |
| ^ | 按位异或 | 所有位运算都是在二进制的基础上进行的 | 相同为0,不同为1 |
| ~ | 按位取反 | 所有位运算都是在二进制的基础上进行的 | 1变0,0变1 |
| << | 左移位 | 所有位运算都是在二进制的基础上进行的 | 所有位向左移动相应的位数 |
| >> | 右移位 | 所有位运算都是在二进制的基础上进行的 | 向右移,前面补符号位 |
| >>> | 无符号有移位 | 所有位运算都是在二进制的基础上进行的 | 向右移,前面补0 |
左移位相当于乘以2
以最快的方式计算10 * 64的结果
位运算是速度最快的byte和short在运算时会转成int类型

赋值运算符
= 赋值,将右边表达式的值,存放到左边的变量中,
当赋值运算符与二目运算符进行组合,就会变成符合赋值运算符
+=,-=,* =, /=,%=
A+=B; 相当于A=A+B 只是结果上相同,不是等价的
三目运算符/三元运算符/条件运算符
语法:boolean ? 数1 : 数2
执行过程:计算boolean的值
若为true:则整个结果为数1
若为false:则整个结果为数2
数1和数2 只会返回其中一个
运算符的优先级
先乘除,后加减,有括号先算括号
如果有一表达式中,包含了很多运算符,也有运算符的优先级,也有运算符的运算顺序
下表中优先级上行优先于下行
| 运算符说明 | Java运算符 |
|---|---|
| 分隔符 | . [] () {} , ; |
| 单目运算符 | ++ -- ~ ! |
| 强制类型转换运算符 | (type) |
| 乘法、除法、求余 | * / % |
| 加法、减法 | + - |
| 移位运算符 | << >> >>> |
| 关系运算符 | < <= > >= instanceof |
| 等价运算符 | == != |
| 按位与 | & |
| 按位异或 | ^ |
| 按位或 | ` |
| 按位与 | && |
| 按位或 | ` |
| 三目运算符 | ?: |
| 赋值运算符 | = |
练手
从控制台输入两个数,然后分别打印这两个数,然后交换这两个数的值

@Test
// 从控制台输入两个数,然后分别打印这两个数,然后交换这两个数的值
public void test13() {
Scanner sc=new Scanner(System.in);
double num1=sc.nextDouble();
double num2=sc.nextDouble();
System.out.println(num1+" "+num2);
double temp=num1;
num1=num2;
num2=temp;
System.out.println(num1+" "+num2);
}

1185

被折叠的 条评论
为什么被折叠?



