目录
一、运算符和表达式
1.二者区别
运算符:对字面量或者变量进行操作的符号
表达式:用运算符把字面量或者变量连接起来,符合java语句的式子就可以被称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式
2.举例说明
int a= 10;
int b= 20;
int c= a+ b;
+ : 是运算符,并且是算术运算符
a + b :是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
二、运算符分类
1.算术运算符
符号 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模、取余 |
/ 和 %的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
public static void main(String[] args) {
//+
System.out.println(3 + 2);//5
//-
System.out.println(5 - 1);//4
//*
System.out.println(7 * 9);//63
//如果在计算时有小数参与 结果有可能不精确
//原因见JavaSE
System.out.println(1.1 + 1.01);//2.1100000000000003
System.out.println(1.1 + 1.1);//2.2
// /
System.out.println(10 / 2);//5
//整数参与计算只能得出整数
System.out.println(10 / 3);//3
//小数参与计算,结果可能是不精确,要想精确计算需要后面知识点
System.out.println(10.0 / 3);//3.333333333333335
// %
System.err.println(10 % 2);//0
System.out.println(10 % 3);//1
}
1.1 数字相加(类型转换)
数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算。
问题1:请问下面变量c的数据类型是什么?
public static void main(String[] args) { int a = 10; double b = 12.3; c= a + b ; }
答案1:double
问题2:请问下面变量c的数据类型是什么?
public static void main(String[] args) { int a = 10; double b = 20.0; c= a + b ; //整数 + 小数= ? }
答案2:double 或者 int 都可以
问题三:请问下面变量c的数据类型是什么?
public static void main(String[] args) { byte a = 10; byte b = 20; c= a + b ; }
答案三:int
类型转换方式 | 内容 |
隐式转换 | 取值范围小的数值 --> 取值范围大的数值 |
强制转换 | 取值范围大的数值 --> 取值范围小的数值 |
1.2 隐式转换(自动类型提升)
把一个取值范围小的数值,转成取值范围大的数据
(此处参考数据取值范围大小顺序)
int a =10;
double b =a; // b = 10.0
隐式转换的两种提升规则:
- 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行计算(见上述问题1)
- byte、short、char三种类型的数据在运算时,都会直接先提升为int,然后在进行运算(见上述问题3)
1.3 强制转换
如果把一个取值范围大的数值,赋值给取值范围小的变量。
是不允许直接赋值的。如果一定要这么做就需要加入强制类型转换。
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
范例:
double a = 12.3; int b=(int) a;
1.4 练习:数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
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);
}
注意:
字符串的“+”操作:当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串。
运算结果:
2.自增自减运算符
符号 | 作用 | 说明 |
+ + | 加 | 变量的值加1 |
- - | 减 | 变量的值减1 |
单独使用:++和--无论放在变量前面还是后面,单独写一行结果是一样的。
参与计算:
先用后加 int a = 10;
int b = a++;
先加后用 int a = 10;
int b = ++a;
2.1自增自减运算符练习
public static void main(String[] args) {
int x = 10;
//后++,先用后加
//先把x变量中的值拿出来,赋值给y,然后再进行自增
//赋值给y的值是自增的
int y = x++; // x = 11 y = 10;
//先++,先加后用
//先把x进行自增,然后把自增后的结果赋值给左边的变量
//先把x自增,然后再把自增之后的值赋值给z
int z = ++x; //x = 12 z = 12
System.out.println("x:" + x);
System.out.println("y:" + y);
System.out.println("y:" + y);
}
运算结果:
3.赋值运算符
符号 | 作用 | 说明 |
= | 赋值 | int a = 10,将10赋值给变量a |
+ = | 加后赋值 | a + = b,将a+b的值给a |
- = | 减后赋值 | a - = b,将a-b的值给a |
* = | 乘后赋值 | a * = b,将a*b的值给a |
/ = | 除后赋值 | a / = b,将a/b的值给a |
% = | 取余后赋值 | a % = b,将a%b的值给a |
注意事项:扩展的赋值运算符隐含了强制类型转换
4.关系运算符(比较运算符)
符号 | 说明 |
== | 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 |
注意事项:关系运算符的结果是boolean类型,要么是true,要么是false。
千万不要把"=="误写成"="。
4.1 练习:约会
需求:您和您的约会对象在餐厅里面正在约会。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他) 如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false。
public static void main(String[] args) {
//1.键盘录入两个整数表示衣服时髦度
Scanner sc = new Scanner(System.in);
System.out.println("请输入我们自己衣服的时髦度:");
int myFashion = sc.nextInt();
System.out.println("请输入我们相亲对象衣服的时髦度:");
int girlFashion = sc.nextInt();
//2.把我们两个人的衣服时髦度进行比较即可
boolean result = myFashion > girlFashion;
//3.打印结果
System.out.println(result);
}
运算结果:
5.逻辑运算符
5.1 什么是逻辑运算符
- 在数学中,一个数据x,大于5,小于15,我们可以这样来进行表示:5<x<15。
- 在java中,我们需要把上面的式子进行拆解,再进行合并表达。 拆解为:x>5 和 x<15 合并后:x>5 & x<15
5.2 逻辑运算符的分类
符号 | 作用 | 说明 |
& | 逻辑与(且) | 并且,两边都为真,结果才为真 |
| | 逻辑或 | 或者,两边都为假,结果才为假 |
^ | 逻辑异或 | 相同为false,不同为true |
! | 逻辑非 | 取反 |
5.3 短路逻辑运算符
符号 | 作用 | 说明 |
&& | 短路与 | 结果和&相同,但是有短路效果 |
|| | 短路或 | 结果和|相同,但是有短路效果 |
注意事项:
- & | :无论左边true、false,右边都要执行。
- && ||:如果左边都能确定整个表达式的结果,右边不执行。
- &&:左边为true,右边不管是真是假,整个表达式的结果一定为true。
- ||:左边为true,右边不管是真是假,整个表达式的结果一定是true。
- 这两种情况下,右边不执行,提高了效率
5.4 练习:数字6
需求:数字6是一个真正伟大的数字,键盘录入两个整数。
如果其中一个为6,最终结果输出true。
如果它们的和为6的倍数。最终结果输出true。其他情况都是false。
public static void main(String[] args) {
//1.键盘录入两个整数
Scanner sc = new Scanner(System.in);
System.err.println("请输入第一个整数:");
int a= sc.nextInt();
System.err.println("请输入第二个整数:");
int b = sc.nextInt();
//2.a ==6 || b ==6 || (a + b) % 6 == 0
//如果满足其中一个,那么就可以输出true
boolean result = a ==6 || b ==6 || (a + b) % 6 == 0;
System.out.println(result);
//可以短路逻辑运算符去连接三个判断
}
运算结果:
6.三元运算符
6.1 什么是三元运算符
- 需求:定义一个变量记录两个整数的较大值
- 作用:可以进行判断,根据判断结果得到不同的内容
- 格式:关系表达式 ? 表达式1 : 表达式2 范例:比较两个数的较大值
a > b ? a : b;
6.2 计算规则 :
- 首先计算关系表达式的值
- 如果值为true,表达式1的值就是运算结果
- 如果值为false,表达式2的值就是运算结果
6.3 练习:两只老虎
需求: 动物园里有两只老虎,体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同。
public static void main(String[] args) {
//1.键盘录入两只老虎的体重
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一只老虎的体重:");
int weight1 = sc.nextInt();
System.out.println("请输入第二只老虎的体重:");
int weight2 = sc.nextInt();
//2.比较
String result = weight1 == weight2 ? "相同" : "不同";
System.out.println(result);
}
运算结果:
7.运算符优先级
优先级 | 运算符 |
1 | .{}() |
2 | !、-、++、-- |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | =、+=、-=、*=、/=、%= |
但是,想要全部记住优先级表很困难!!
所以,只要记住()优先于所有!!