day3
今日任务
:
1.能够使用自增自减运算符并知道在前在后的区别
2.能够知道哪些运算中发生了隐式转换
3.能够知道如何对数据进行强转
4.能够使用关系运算符完成数据的比较
5.能够掌握不同逻辑运算符的运算规则
6.能够掌握三元运算符的格式和执行流程
7.能够使用小括号提升算数优先级
8.能够掌握if语句的三种格式使用
9.能够清楚switch语句的执行流程
1.自增自减运算符
++:自身+1
--: 自身-1
++在前,先自增后运算
++在后,先运算,后自增
单独使用:
int a=1;
a++; //a=2
参与运算:
int a=2;
int b=++a; //a=3,b=3
int c=b++; //b=4,c=3
2.隐式转换
1.赋值期间:小给大,直接赋值(小、大是取值范围)
byte---short---char--int---long--float--double
1 2 2 4 8 4 8 字节
虽然float占用4个字节,但取值范围要比8个字节的long更大,小数在底层的二进制存储,更加节省空间。
int a=3;
double b=a; // b=3.0
2.运算期间:小的和大的在一起运算的时候,会提升为大的再进运算
``
3.隐式转换
注:
1.大给小不能直接给,需要加入强转
double a=2.1;
int b=(int)a; //b=2
2.可能会出现精度损失
03. 类型转换面试题:
一、
1.byte b1 = 3;
2.byte b2 = 4;
b3.yte b3 = b1 + b2;
// 需求: 以上代码是否存在问题, 有的话请说明原因并改成.
byte b3 = b1 + b2;
错误原因: b1和b2是两个byte类型, 两个byte相加之前, 都会将自己提升为int类型,两个int相加, 结果还是int, int结果给byte变量赋值, 大的给小的, 需要进行强制转换。
二、
byte b = 3 + 4;
// 需求: 以上代码是否存在问题, 有的话请说明原因并改成.
疑惑点: 先看等号右边, 3 和 4 是两个整数常量. 所有整数默认都是int类型.
两者相加结果应该也是int类型, int给byte赋值, 应该需要强制转换.
解释:
java 存在常量优化机制, 在编译的时候(javac)
就会将常量直接进行运算.
.class字节码文件:
byte b = 7;
检测: 7是否在byte的取值范围内, 如果不在就报错 如果在, 编译通过.
4.赋值运算符
- = 把右边的值赋给左边
- += 把左右两边的值进行相加,然后再赋值给左边
- -= 把左右两边的值进行相减,然后再赋值给左边
- /= 把左右两边的值进行相除,然后再赋值给左边
- *= 把左右两边的值进行相乘,然后再赋值给左边
- %= 把左右两边的数相除所得的余数赋值给左边 注:区别"=“和”=="。
5.关系运算符
<
>
>=
<=
==
!=
结论 : 结果只能是boolean类型的 true, false.
6.逻辑运算符
1 &(与): 并且,遇false则false.
例如:今天中午消费预算,在20~~50之间 :
if ( (spend>=20) & (spend<=50) )
2. | (或) : 或者,遇true则true.
3. !(非) : 取反
4. ^ (异或) : 相同为true,不同为false.
7.短路逻辑运算符
- && :具有短路效果,左边为false,右边就不执行了
- || :具有短路效果,左边为true,右边就不执行了
public class Demo5Operator {
/*
&& : 具有短路效果, 左边为false, 右边就不执行了.
如果左边为true, 右边要继续执行.
*/
public static void main(String[] args) {
int a = 3;
int b = 4;
// true & false
System.out.println(++a <= 4 && b-- < 3); // false
System.out.println(a); // 4
System.out.println(b); // 3
}
}
8.三元逻辑运算符
int a=1;
int b=2
int max = a > b ? a : b ;
9.运算符优先级
使用();
10. If语句
1. 第一种格式:
if (判断条件) {
语句体1;}
else(判断条件){
语句体2 ; }
2. 第二种格式:
if (判断条件1) {
语句体1;}
else if (判断条件2) {
语句体2;}
else if (判断条件3) {
语句体3;}
else {
语句体n+1 ;}
3.第三种格式(if嵌套):
if (判断条件) {
语句体1;
if(判断条件){
语句体2;}
else if (判断条件) {
语句体3; }
else if (判断条件) {
语句体4; }
else{
语句体5 }
}
注:
- if 语句的 {} 中如果只有一条语句, {} 可以省略不写
- if 语句的 () 中, 最终产生的是一个boolean类型结果,根据这个结果决定程序的走向
10.流程控制语句
顺序结构:
Java默认的执行流程
分支结构:
if
switch
循环结构:
for
while
do...while
11. Switch语句
switch(将要匹配的值){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
................
default:
语句体n+1;
break;
}