day03
上篇
自增自减运算符:
-
单独使用
-
参与运算使用(面试里的笔试用到) int b = a++;
++, – 只适用于变量
面试题:
int a = 3;
int b = (++a) + (a++) + (a * 10);
System.out.println(a);
System.out.println(b);
类型转换
隐式转换
- 取值范围小的赋值给取值范围大的,即小给大。
- 转换过程不是明面的,而是程序内部自己完成,所有称隐式。
- 细节:小给大是指取值范围。
- 取值范围 byte < short < int < long < float < double 。
- float 占4字节,但比占8字节的long更大。(因为两者存储的机制不一样,float是按照压缩存储。小数和整数存储原理不一样,小数是压缩存储,整数是按照2的几次幂存储。IEEE754算法原理。)
- 原因:小数的二进制存储,比整数更加节省内存。
- Java中,数据类型不统一,没法直接计算。取值范围小的,会提升为大的。
- byte、short、char 三种数据在运算时,都会提升为int,然后再运算。
byte a = 10;
byte b = 20;
byte c = a + b; //在这里会发生报错,因为被提升为int了
char a = 'a';
char b = 'b';
int c = a + b; //字符串会转换为对应int类型
强制转换
- 把取值范围大的赋值给取值范围小的,不允许。需要进行强制转换。
- 尽量减少强转的使用,因为有可能造成精度的丢失。
- IDEA快捷键:alt + enter 给出红色波浪线的解决方案,即代码修正键。
面试题
注意常量优化机制
byte b1 = 3;
byte b2 = 4;
byte b3 = (byte)(b1 + b2);
byte b = 3 + 4; //这里不会报错
原因:Java存在常量优化机制,3和4是两个常量
- 在编译的时候(javac),就会将3和4运算出一个7的结果
- 字节码文件(.class) byte b = 7;
- 检查运算结果,是否在byte的取值范围内
不在:编译出错
在:编译成功
赋值运算符
-
基本赋值运算符 =
-
扩展赋值运算符 += 、-=、*=、/=、%=
- 注意事项:扩展运算符,自带强转效果
int a = 10;
double b = 12.3;
a += b; // a = (int)(10 + 12.3)
System.out.println(a); // 22
关系运算符
- 也叫比较运算符 > 、< 、>=、<=、 ==、 !=
三元运算符
-
也叫三目运算符,根据一个判断条件,达成二者选其一的效果。既有判断又有执行。
-
格式: 判断条件 ? 值1 :值2;
- 执行流程:
- 执行判断条件,看其返回结果是true ,还是false
- true:返回值1;
- false:返回值2。
- 执行流程:
-
案例
/*
需求:键盘录入3个整数,求出最小值,中间值,最大值,并按照从小到大的顺序打印出控制台。
*/
//1.键盘录入
System.out.println("请输入三个值:");
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
//2.求出三个值
int sum = num1 + num2 + num3;
int tem = num1 < num2 ? num1 : num2;
int min = tem < num3 ? tem : num3;
tem = num1 > num2 ? num1 : num2;
int max = tem > num3 ? tem : num3;
int mid = sum - min -max;
//3.打印
System.out.println("您输入的三个值从小到大为:"+min+"\t"+mid+"\t"+max);
彩蛋
- 格式化输出快捷键 变量.soutv
a.soutv ===== System.out.println("a = " + a);
-
参与运算:
a++ :先用后加(先把a原来的值取出来参与运算,再对a自增)
++a:先加后用(先把a在内存自增,再取出来运算)
-
类型转换:自动类型转换(小转大) 强转类型转换(大转小)
-
取值范围小到大的顺序
byte -> short -> int -> long ->float -> double
-
表达式类型提升
- byte、short、int 参与运算会转为int类型
- 不同类型参与运算,会转为最高类型
备注:老师的总结往往是难点和易错点。
下篇
逻辑运算符
- 代码层面,连接布尔类型的表达式,或者值
- 理解层面,可以用来整合多个条件,为一段整体的逻辑
- 分类, & | !^ (与,或,非,异或)
- 异或特点:相同为false,不同为true(几乎不怎么用,了解即可)
单与双的区别:
- 单不具有短路效果,而双具有短路效果。短路即判断出结果以后,不再执行后面代码。即双效率更高。
结论:逻辑运算符最常用的是 &&、||、!
运算符优先级
- && > || , 掌握小括号使用
分支语句
- 顺序结构(默认) 分支结构(if、switch) 循环结构(for、while、do……while)
彩蛋
注意:写了一段逻辑之后,先调试,看是否有问题。不要等到写了很多代码之后,发现出问题了。
IDEA操作:split and move right 分屏到右侧