Day03
运算符
算数运算符
+、-、*、/、%、++、–
-
取余——%
0取余任何数均为0
任何数取余0,会运行错误
-
自增++、自减–
单独使用时(一句语句中只有自增自减运算符),写前写后一样;
被使用时,写前写后不一样,a++的值为a,++a的值为a+1
int a = 5, b = 5; int c = a++; //先将a赋值给c,再将a+1 int d = a; //此时a已经变成a+1,所以d=a+1 int e = ++b; //先将b+1,再将b+1赋值给e int f = b; //f=b+1 System.out.println(c);//5 System.out.println(d);//6 System.out.println(e);//6 System.out.println(f);//6 System.out.println(f++);//6 System.out.println(++f);//8
关系运算符
关系运算的结果为Boolean型,成立为true,不成立为false
int a = 10;
int b = 20;
System.out.println(a > b);//false
System.out.println(a < b);//true
System.out.println(a == b);//false
System.out.println(a >= b);//false
System.out.println(a <= b);//true
System.out.println(a != b);//true
System.out.println("--------------------");
System.out.println("a % b = " + a % b);
System.out.println(a % b == 0);
System.out.println(a++ == 10);//true
System.out.println(a++ == 10);//false
逻辑运算符
&&、||、!
逻辑运算建立在关系运算之上,逻辑运算的结果也是boolean型
-
&&(与):同时满足才满足,注:短路与,若与的前半段语句已经是false,则发生短路,后半段语句将不再执行
int a = 10; int b = 11; System.out.println((a > b) && (a++ < b)); // false && true,(a++ < b)不执行,a大小不变 System.out.println(a); // 10 System.out.println((a > b) || (a++ < b)); // false || true,(a++ < b)执行,a+1 System.out.println(a); // 11
-
||(或):满足一个则满足,
[!TIP]
注:短路或,若与的前半段语句已经是true,则发生短路,后半段语句将不再执行
int a = 20; int b = 11; System.out.println((a > b) || (a++ < b)); // true || false,(a++ < b)不执行,a大小不变 System.out.println(a); // 20 System.out.println((a > b) && (a++ < b)); // true && false,(a++ < b)执行,a+1 System.out.println(a); // 21
-
!(非):取反
赋值运算符
-
简单扩展运算符
=
-
扩展赋值运算符
+=、-=、*=、/=、%=
在本身基础上做操作,扩展赋值会自动强转,计算完会将结果强转为本身的数据类型
short s = 5; s = s + 10;//编译错误,s+10的结果为int,无法存入s(short),需要强转 s += 10;//+=会自动强转,该语句等价于s=(short)(s+10)
-
字符串连接运算符
不管什么类型的数据,只要用+与字符串相连,其结果均为字符串
int a = 10; System.out.println("age=" + a); System.out.println("拼接后的数据类型为:"+ ("age=" + a).getClass().getName());
//output age=10 拼接后的数据类型为:java.lang.String
-
条件运算符(三目运算符)
语法:
boolean表达式 ? 表达式1 : 表达式2
执行:
- boolean表达式结果为true,整体结果为表达式1的值;
- boolean表达式结果为false,整体结果为表达式2的值;
扩展——装箱、拆箱
基本数据类型对应的包装类
基本数据类型 | 包装类 |
---|---|
byte | Btye |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
装箱API
int a = 10;
Integer b = Integer.valueOf(a)
拆箱API
int c = b.intValue();
double d = b.doubleValue();
自动装箱:基本类型的数据处于需要对象的环境中时,会自动转为对象
Integer num = 10;//①自动装箱
Integer num1 = Integer.valueOf(10); //与①自动装箱等价
自动拆箱:对象自动转成基本数据类型,且不会显式调用intValue()、doubleValue()等转型方法
int num2 = num;//②自动拆箱
int num3 = num.intValue();//与②自动拆箱等价
[!IMPORTANT]
注:空指针异常
Integer b = null;
int b1 = b;//编译错误,空指针异常
System.out.println("b=" + b);//编译错误,空指针异常
分支结构
-
if…else…
两条分支,要么满足条件,要么不满足条件if (...){ ... } else { ... }
-
if…else if…
多条分支,可以有多个else if,类似于switch,满足条件时走对应分支if (...){ ... } else if (...){ ... } else if (...){ ... } ...
-
switch…case…
[!IMPORTANT]
- default是默认路径,当所有case均不满足条件时,走default
- 所有case中必须添加break语句,否则将会顺序执行所有case分支
- 目前判断条件只能对整数(也支持String和枚举),且只能判断相等
基本语法格式:
switch (...){
case 1: break;
case 2: break;
case 3: break;
...
default: break;
}
以枚举为条件
public class SwitchDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int colorNumber = scanner.nextInt();
// 请在这里使用switch语句,实现根据colorNumber的值,输出对应的颜色
Color color;
switch (colorNumber){
case 1:
color = Color.RED;
break;
case 2:
color = Color.GREEN;
break;
case 3:
color = Color.BLUE;
break;
default:
color = Color.UNKNOWN;
}
System.out.println("color = " + color);
scanner.close();
}
}
enum Color{
RED, GREEN, BLUE, UNKNOWN;
}