什么是自动类型转换,为什么要学习自动类型转换?
自动类型转换的底层原理

自动类型转换的其他形式

- 为什么要进行类型转换?
- 存在不同类型的变量赋值给其他类型的变量。
- 自动类型转换是什么样子的?
- 类型范围小的变量,可以直接赋值给类型范围大的变量。
表达式的自动类型转换

- 表达式的自动类型转换是什么样的?
- 小范围的类型会自动转换成大范围的类型运算。
- 表达式的最终结果类型是由谁决定的?
- 最终类型由表达式中的最高类型决定。
- 表达式中有哪些类型转换是需要注意的?
- byte short char 是直接转换成 int 类型参与运算的。
场景

问题
强制类型转换


- 什么是强制类型转换?
- 可以强行将类型范围大的变量、数据复制给类型范围小的变量。
数据类型 变量 = (数据类型)变量、数据
- 强制类型转换有哪些需要注意的?
- 可能出现数据丢失。
- 小数强制转换成整数是直接截断小数保留整数。
运算符
算数运算符

- 算数运算符有哪些?
- +、-、*、/、%
- ==/==需要注意什么,为什么?
- 如果两个整数做除法,其结果一定是整数,因为最高类型是整数。
案例:数值拆分

“+” 做连接符
独门秘籍
// 目标:+ 符号做连接符的识别
int a = 5;
System.out.println("abc" + 'a'); // abca
System.out.println("abc" + a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc" + 5 + 'a'); // abc5a
System.out.println(15 + "abc" + 15); // 15abc15
System.out.println(a + 'a'); // 102,'a'的底层是二进制存储,是97,所以结果是102
System.out.println(a + "" + 'a'); // 5a
System.out.println(a + 'a' + " itheima "); // 102 itheima
System.out.println("itheima" + a + 'a'); // itheima5a
System.out.println("itheima" + (a + 'a')); // itheima102
- + 除了做基本数学运算,还有哪些功能?
- 与字符串做 + 运算时会被当成连接符,其结果还是字符串。
- 能算则算,不能算就在一起。
自增自减运算符

注意:
自增自减的使用注意事项


- 自增、自减运算符是什么,有什么作用?
- ++、–。对当前变量 +1、-1
- 自增、自减运算符在变量前后有区别吗?
- 如果单独使用放前后是没有区别的。
- 非单独使用:在变量前,先进行变量自增 / 自减,再使用变量。
- 非单独使用:在变量后,先使用变量,再进行变量自增 / 自减。
案例:自增、自减拓展案例(有些面试题会出现)
int c = 10;
int d = 5;
int rs3 = c++ + ++c - --d - ++d + 1 + c--;
// c 10 11 12 11
// d 5 4 5
// rs3 = 10 + 12 - 4 - 5 + 1 + 12 = 26
System.out.println(c); // 11
System.out.println(d); // 5
System.out.println(rs3); // 26
基本赋值运算符
int a = 10; // 先看 “=” 右边,把数据10赋值给左边的变量 a 存储。
扩展赋值运算符

注意:扩展的赋值运算符隐含了强制的类型转换。
- 赋值运算符有哪些?
- =、+=、-=、*=、/=、%=
- 作用是什么?
- 基本作用是赋值。
- += 还可以实现数据的累加,把别人的数据加给自己。
关系运算符

逻辑运算符概述



示例:
int a = 10;
int b = 20;
// System.out.println(a > 100 & ++b > 10); // false
// System.out.println(b); // b = 21
System.out.println(a > 100 && ++b > 10); //false
System.out.println(b); // b = 20
int i = 10;
int j = 20;
// System.out.println(i > 2 | ++j > 10); // true
// System.out.println(j); // j = 21
System.out.println(i > 2 || ++j > 10); // true
System.out.println(j); // 20
- 逻辑运算符有哪些,有什么特点?
- 逻辑与 “&”:有一个为 false、结果是 false
- 短路与 &&:一个为 false、结果是 false。前一个为 false,后一个条件不执行了
- 逻辑或 “!”:有一个为 true、结果是 true
- 短路或 “!!”:一个为 true、结果是 true。前一个为 true,后一个条件不执行了
- 逻辑非 “!”:!false = true、!true = false
- 逻辑异或 “^”:相同是 false、不同是 true
- 注意:实际开发中、常用的逻辑运算符还是:&&、||、!
三元运算符介绍
条件表达式 ? 值1 : 值2;
案例:求三个整数的最大值
需求:定义三个整数,找出最大值并打印在控制台。
分析:
int i = 10;
int j = 30;
int k = 50;
// 1. 找出2个整数的较大值
int temp = i > j ? i : j;
// 2. 拿临时变量与第三个变量的值继续比较
int rsMax1 = temp > k ? temp : k;
System.out.println(rsMax1);
System.out.println("---------------拓展知识----------------");
int rsMax2 = i > j ? (i > k ? i : k) : (j > k ? j : k);
System.out.println(rsMax2);
运算符优先级

// 目标:看看 Java 是否存在优先级,大家以后需要注意优先级问题
System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
System.out.println((10 > 3 || 10 > 3) && 10 < 3); // false
需求:

API(Application Programming Interface,应用程序编程接口)
下载 API 文档
http://www.oracle.com/technetwork/java/javase/downloads/index.html
键盘录入功能实现的三个步骤:
// 1. 导包操作(并不需要自己写,以后通过工具进行导入更方便)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 目标:学会使用键盘录入技术
// 2. 得到一个键盘扫描器对象
Scanner sc = new Scanner(System.in);
// 3. 调用 sc 对象的功能等待接受用户输入的数据
// 这个代码会等待用户输入数据,指导用户输入完数据并按了回车键就会把数据拿到。
System.out.println("请输入您的年龄:");
int age = sc.nextInt();
System.out.println("年龄是:" + age);
System.out.println("请输入您的名称:");
String name = sc.next();
System.out.println("欢迎:" + name);
}
}
注意:
- API 是什么?
- Application Programming Interface,应用程序编程接口。
- Java 写好的程序,咱们可以直接调用。
- 键盘录入的开发步骤
- 导包:import java.util.Scanner;
- 抄写代码得到扫描器对象:Scanner sc = new Scanner(System.in)
- 抄写代码等待接收用户输入的数据:sc.nextInt()、sc.next()