运算符
运算符
基本概念
运算符
对字面量或者变量进行操作的符号
表达式
用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明
int a = 10;
int b = 20;
int c= a + b;
+:是运算符,并且是算术运算符
a+b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
算术运算符
+加
System.out.println(1+5);//6
1.数字相加
数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算。
·隐式转换(自动类型提升)(小➡️大)
把一个取值范围小的数值,转成取值范围大的数据。
取值范围从小到大:byte➡️short➡️int➡️long➡️float➡️double
byte,short,char三种类型的数据在运算的时候,都会直接先提升为int类型,然后再进行运算。
int a=10;
double b=a;//10.0
byte a=10;
byte b=20;
int c=a+b;//byte类型在计算时直接提升为int
·强制转换(大➡️小)
如果把一个取值范围大的数值,赋值给取值范围小的变量是不允许直接赋值的。如果一定要这么做就需要加入强制转换。
格式:目标数据类型 变量名=(目标数据类型)被强制转换的数据;
double a=12.4;
int b=(int)a;//12
byte a=100;
byte b=200;
byte num=(byte)(a+b);//记得打括号
System.out.println(num);//num=-56,此时结果发生错误,因为要转换的数据过大。
2.字符串相加
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了。
会将前后的数据进行拼接,并产生一个新的字符串。
eg:“123”+123 🟰“123123”
连续进行“+”操作时,从左到右逐个执行。
eg:1+99+“年你好”🟰“100年你好”
只要有字符串出现,就是拼接操作。
int age=18;
System.out.println("我的年龄是"+age+"岁");//我的年龄是18岁
System.out.println("我的年龄是"+"age"+"岁");//我的年龄是age岁
System.out.println(1+2+"abc"+2+1);//3abc21
3.字符相加
当字符+字符或字符+数字时,会把字符通过ASCII码表查询到对应的数字再进行计算。

(图见评论区)
System.out.println(1+'a');//98 ➡️数字➕字符 看ASCII码表
System.out.println('a'+"abc");//"aabc" ➡️只要有字符串出现就用拼接
-减
System.out.println(2-1);//1
*乘
System.out.println(2*7);//14
/除
System.out.println(10/2);//5
System.out.println(10/3);//3
System.out.println(10.0/3);//3.3333333335
//.整数参与计算,结果只能得到整数
//小数参与计算,结果有可能是不精确的,如果我们需要精确计算,那么需要用到后面的知识点。
%取模,取余
System.out.println(10%2);//0
System.out.println(10%3);//1
//应用场景:
//1.可以用取模来判断,A是否可以被B整除
//A%B 10%3
//2.可以判断A是否为偶数
//A%2如果结果为0.那么证明A是一个偶数。如果结果为1,那么证明A是一个奇数
//3.在以后,斗地主发牌
//三个玩家
//把每一张牌都定义一个序号
//拿着序号%3如果结果1,就发给第一个玩家
//如果结果为2,那么就发给第二个玩家
//如果结果为0,那么就发给第三个玩家
练习:数值拆分
要求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台。
公式:
个位:数值%10
十位:数值/10%10
百位:数值/100%10
千位:数值/1000%10;
完整代码
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个三位数数字");
int number=sc.nextInt();
int ge=number%10;
int shi=number/10%10;
int bai=number/100%10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
}
}
自增自减运算符
基本用法
| 符号 | 作用 | 说明 |
|---|---|---|
| ++ | 加 | 变量的值加一 |
| -- | 减 | 变量的值减一 |
**++和--既可以放在变量的前边,也可以放在变量的后边。
两种场景
1.单独使用:++和--无论是放在变量前还是后,单独写一行结果是一样的。
2.参与计算
int a=10;
int b=a++;//先用后加
int a=10;
int b=++a;//先加后用
练习
public class test2 {
public static void main(String[] args) {
int a=10;
int b=a++;//先用后加,此时b=10,a=11
int c=++a;//先加后用,此时c=a=12
System.out.println("a为"+a);//12
System.out.println("b为"+b);//10
System.out.println("c为"+c);//12
}
}
赋值运算符
| 符号 | 作用 | 说明 |
|---|---|---|
| = | 赋值 | int a=10,将10赋值给变量a |
| += | 加后赋值 | int a+=b,将a+b的值赋给a |
| -= | 减后赋值 | int a-=b,将a-b的值赋给a |
| *= | 乘后赋值 | int a*=b,将axb的值赋给a |
| /= | 除后赋值 | int a/=b,将a➗b的商赋给a |
| %= | 取余后赋值 | int a%=b,将a➗b的余数赋给a |
//细节:
//+=、-=、*=、/=、%=底层都隐藏了一个强制类型转换
int a=10;
int b=20;
a+=b;
//等同于a=(int)(a+b);
short s=1;
s+=1;
//等同于s=(short)(s+1);
关系运算符/比较运算符
分类
| 符号 | 说明 |
|---|---|
| == | a==b,判断a和b的值是否相等,成立为true,不成立为false |
| != | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
| > | a>b,判断a是否大于b,成立为true,不成立为false |
| >= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
| < | a<b,判断a是否小于b,成立为true,不成立为false |
| <= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
注意事项⚠️
1.关系运算符的结果都是boolean类型,要么是true,要么是false。
2.千万不要把“==”误写成“=”。
例题
您和您的约会对象正试图在餐厅获得一张桌子: 键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入@~10之间的整数,不能录其他)
如果你的时覺桿度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false.
import java.util.Scanner;
public class test3 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的时髦程度(0~10");
int fashion1=sc.nextInt();
System.out.println("请输入相亲对象的时髦程度(0~10");
int fashion2=sc.nextInt();
//法1
if(fashion1>fashion2)
System.out.println(true);
else System.out.println(false);
//法2
boolean result=fashion1>fashion2;
System.out.println(result);
}
}
逻辑运算符
分类
| 符号 | 作用 | 说明 |
|---|---|---|
| & | 逻辑与(且) | 并且,两边都为真,结果才为真 |
| | | 逻辑或 | 或者,两边都为假,结果才为假 |
| ^ | 逻辑异或 | 相同为false,不同为true |
| ! | 逻辑非 | 取反 |
短路逻辑运算符(提高效率)
| 符号 | 作用 | 说明 |
|---|---|---|
| && | 短路与 | 结果与&相同,但是有短路效果 |
| || | 短路或 | 结果与|相同,但是有短路效果 |
短路效果:当左边的表达式能确定最终的结果时,右边的表达式就不会参与运行了。
int a=10;
int b=10;
boolean result= ++a<5&&++b<5;
System.out.println(result);//false
System.out.println(a);//11
System.out.println(b);//10 ➡️ ++b<5未参与
//对比:单个&
int a=10;
int b=10;
boolean result= ++a<5&++b<5;
System.out.println(result);//false
System.out.println(a);//11
System.out.println(b);//11 ➡️ 无论左边是真是假,右边都会参与运行
例题:
数字6是一个真正伟大的数字,键盘录入两个整数:
如果其中一个为6,最终结果输出true:
如果它们的和为6的倍数。最终结果输出true。
其他情況都是false。
import java.util.Scanner;
public class test4 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int num1=sc.nextInt();
System.out.println("请输入第二个整数");
int num2=sc.nextInt();
boolean result=num1==6||num2==6||(num1+num2)%6==0;
//可以直接三个一起判断
System.out.println(result);
}
}
三元运算符
格式
关系表达式?表达式1:表达式2;
计算规则
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
注意⚠️
三元运算符的结果必须被使用!
//第一种表达
int max=n>m?n:m;
System.out.println(max);
//第二种表达
System.out.println(n>m?n:m);
例题
1.动物园里有两只老虎,体重分别为通过键盘录入获得,
请用程序实现判断两只老虎的体重是否相同。
import java.util.Scanner;
public class test5 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一只老虎的体重");
int weight1=sc.nextInt();
System.out.println("请输入第二只老虎的体重");
int weight2=sc.nextInt();
//法1
boolean result=weight1==weight2?true:false;
//法2
String result=weight1==weight2?"相同":"不相同";
System.out.println(result);
}
}
2.一座寺庙里住着三个和尚,已知他们的身高分别为150cm、190cm、165cm,
请用程序实现获取这三个和尚的最高身高.
int h1=150,h2=190,h3=165;
int temp=h1>h2?h1:h2;
int max=temp>h3?temp:h3;
System.out.println(max);
运算优先级
()优先于所有
浙公网安备 33010602011771号