1. 类型转换
1.1 为什么需要类型转换
因为计算机对不同的数据类型有不同的保存方式,例如:int(整型) 类型在32位计算机中,占4个字节。
而double(双精度)类型在32位计算机中,占8字节。当高位转向低位的时候,如果不进行类型转换,就会造成数据溢出。
为保护数据信息,需要进行数据类型转换。
1.2 隐士类型转换/自动类型转换
/*
隐士类型转换/自动类型转换:
小的取值范围的数据类型 向大的取值范围的数据类型转换,不会造成数据精度的损失
byte --> short
--> int --> long --> float --> double
char
提示:char类型的数据不能和byte short 类型的数据直接互转
如果有两种不同数据类型参与运算的时候,小的取值范围的数据类型自动向大的数据取值范围的数据类型转换,然后再参与运算
注意事项:
byte short char这三种数据类型在参与运算的时候,首先要转成int类型的数据,再参与运算
*/
public class Demo01 {
public static void main(String[] args) {
//byte -128 --- 127
byte b = 100;
//int -2147483648 --- 2147483647
int i = b;
System.out.println(b);
System.out.println(i);
//char c = b; byte类型的数据不能直接转成char类型
char d = 'a';
//byte e = d; char类型的数据不能直接转成 byte类型
short f = 200;
//char g = f; // short类型的数据不能直接转成char类型
//short h = d;// char类型的数据不能直接转成 short类型
}
}
1.3 强制类型转换
/*
强制类型转换:
把大的取值范围的数据类型,向小的取值范围的数据类型转换,有可能造成数据精度的损失
当大的取值范围的数据类型的值,在小的的数据类型 取值范围内,就不会造成数据精度的损失
当大的取值范围的数据类型的值,超出了小的的数据类型取值范围,就会造成数据精度损失
格式:
目标数据类型 变量名 = (目标数据类型)变量名或者值
*/
public class Demo02 {
public static void main(String[] args) {
int a = 100;
//把int类型的数据a = 100转成byte类型的数据,需要强制类型转换
//目标数据类型 变量名 = (目标数据类型)变量名或者值
byte b = (byte) a; //-128 ---127
System.out.println(a);//100
System.out.println(b);//100
System.out.println("-------------------------");
int c = 130;
byte d = (byte) c;
System.out.println(c);//130
System.out.println(d);//-126
byte e = (byte) 150;
}
}
/* 了解 后面详细讲
130 ==> 1000 0010
int 类型的数据 4个字节 每个字节在计算机中占8位
0 000 0000 0000 0000 0000 0000 1000 0010
计算机的运算,使用的是二进制的补码 正整数的补码和原码反码是一样的,
最高位表示符号位 0 代表整数 1 代表负数
把它强转成byte类型 占1个字节 8位
1 000 0010 补码
负数的原码真实的表示数据的大小
反码 符号位不变 其余位按位取反 就是让 0变1 1变0
补码 就是反码末尾加一
1 000 0010 补码减一 拿到反码 ==> 1 000 0001 反码 ==> 1 111 1110 原码 ==> 转成十进制就是-126
*/
2.键盘录入
2.1 键盘录入步骤
/*
java 给我们提供了一个键盘录入的工具叫 Scanner
怎么使用?
1.导包 语句放在类名的上面 和 package的下面
import java.util.Scanner;
2.创建对象 在main方法中
Scanner sc = new Scanner(System.in);
3.接受数据 在main方法中
int num = sc.nextInt();
*/
//1.导包 语句放在类名的上面 和 package的下面
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//键盘录入一个整数 100 接收数据 在控制台输出
//2.创建对象 在main方法中
Scanner sc = new Scanner(System.in); //sc 变量名,也可以自己起名字
//3.接受数据 在main方法中
System.out.println("请输入一个整数:");
int num = sc.nextInt(); //num也是变量名 也可以自己起名字 ,这一句代码中的sc要和创建对象的sc一模一样
//4.在控制台输出
System.out.println("num = " + num);
}
}