1. 算术运算符
- 运算符
- 对常量和变量进行操作的符号
System.out.println(10 + 20);
- int a = 1;
- int b = 2;
- System.out.println(a + b);
-
表达式
用运算符把常量或者变量连接起来符号,java语法的式子就可以称为表达式。
2. 字符的+操作
思考: System.out.println(‘a’ + 1); // 输出结果? 98
注意: 当char类型在跟整数类型的数据进行运算的时候, 实际上是?
是查询该字符在底层所对应的码表数值, 然后再进行相加.
查询码表数值的过程, 其实也是一个自动类型提升的过程.char 2个字节 int 4个字节
- char类型在和整数类型运算的时候, 会查找底层的ASCII数值, 然后再运算
- 小的数据类型在和大的数据类型相加的时候, 会先将小的数据类型提升为大的之后, 再进行运算.
-
结论:
不同的基本数据类型参与运算时,整个算术表达式的类型会自动进行提升,提升为参与运算的最高等级。
提升规则:
单独记忆 : byte类型,short类型和char类型将被提升到int类型
> 整个表达式的类型自动提升到表达式中最高等级操作数相同的类型
> 等级顺序:byte,short,char , int , long , float , double
float : 4个字节 long : 8个字节 注意: float虽然占4个字节, 但能够表示的范围, 比long要大 小数类型底层二进制的存储结构和整数类型是不一样的.
3. 赋值运算符
-
扩展赋值运算符: += -= *= /= %=
+= : 将符号左右两边的数据做加法运算, 然后再将结果赋值给左边的变量 int a = 10; a += 20; // a = (int)(a + 20); 将a所记录的10和符号右边的20做加法运算, 计算出一个30的结果, 再赋值给左边的变量a
short s = 1;
s = s+1; // 错误: 不兼容的类型: 从int转换到short可能会有损失精度
short s=1;
s = (short)(s+1);
// s是short类型, 在跟常量1做运算的时候, 会先提升为int再做运算
// 两个int相加的结果还是int, 将int赋值给一个short变量, 需要加入强制转换符.
System.out.println(s);
short s=1;
s += 1;
short s=1;
s += 1;
// s = (short)(s + 1);
// += 符号, 底层自动帮我们做了强制转换
System.out.println(s);
4.自增自减运算符
- ++ – 运算符的基本应用是?
- 单独使用有什么效果?
- 参与运算使用有什么效果?
总结:
1. ++, --运算符就是完成变量自身+1, 或者自身-1的操作
2. 单独使用的时候, ++在前在后没有区别, 就是完成自身+1的操作
int a = 10;
a++;
++a;
4. ++运算符参与运算使用的时候 :
++在前 : 会先让变量自身+1, 然后再进行赋值
++在后 : 会先将变量原本的值取出来赋值, 然后自身再+1
int a = 10;
System.out.println(a++);
System.out.println();
int x = 10;
int y = x++; // y = 10 , x = 11
int z = ++x; // x = 12 , z = 12
System.out.println(x); // 12
System.out.println(y); // 10
System.out.println(z); // 12
---------------
int x = 4;
// 4 + 6 + 60
int y = (x++)+(++x)+(x*10);
System.out.println("x="+x);
System.out.println("y="+y);
5.逻辑运算符
分类:
&(与)(并且) : 符号左右两边的布尔值同时为true的时候, 结果才是true遇false则false.
应用场景: 用于范围性的判断查找 |(或)(或者) : 符号左右两边有一个为true, 结果就是true !(非)(取反) : true变false, false变true
-
扩展: 异或的特点
一个数被另外一个数^两次, 该数本身不变.实现两个变量的数据交换, 不能使用三方变量 int a = 10; int b = 20; a = a ^ b; // a = 10 ^ 20; b = a ^ b; // b = 10 ^ 20 ^ 20; // b = 10 a = a ^ b; // a = 10 ^ 20 ^ 10; // a = 20 实现两个变量的数据交换 int a = 10; int b = 20; // temp : 临时 int temp = a; // temp = 10 a = b; // a = 20 b = temp; // b = 10 System.out.println(a); // 20 System.out.println(b); // 10
6.短路逻辑运算符
-
&和&&的区别是?
& : 普通的与, 无论符号左边是true还是false, 右边都要继续执行 && : 短路与, 当符号左边为false的时候, 右边就不执行了. 但是, 如果左边为true, 右边还是要继续执行. 结论 : 短路与可以提升一点点的执行效率.
-
|和||的区别是?
| : 无论符号左边是true还是false, 右边都要继续执行 || : 具有短路效果, 当符号左边为true的时候, 右边就不执行了.
7.分支结构 - if-if…else-if…else if
1:
if(判断语句){
语句体;
}
2.
if(比较表达式){
语句体1;
}else{
语句体2;
}
3.
if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
import java.util.Scanner;
public class Test2_If {
/*
键盘录入考试成绩, 根据学生成绩输出学生等级
90 - 100 优秀
80 - 89 良好
70 - 79 中等
60 - 69 及格
0 - 59 请加油努力
*/
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
// 1. 判断键盘录入的成绩是否是合法值
if(score >= 0 && score <= 100){
// 2. 判断学生等级
if(score >= 90 && score <= 100){
System.out.println("优秀");
}else if(score >= 80 && score <= 89){
System.out.println("良好");
}else if(score >= 70 && score <= 79){
System.out.println("中等");
}else if(score >= 60 && score <= 69){
System.out.println("及格");
}else if(score >= 0 && score <= 59){
System.out.println("请加油努力");
}
}else{
// 非法值
System.out.println("您的成绩录入有误");
}
}
}