第二天学习JAVASE_006
JAVASE_006节
基本数据类型转换
概念
转换原因
Java是强类型语言,数据类型之间不能随意转换,但运算时数据类型不匹配,所以要转换。
分类
- 自动类型提升
- 强制类型转换
自动类型提升
范围小的数据类型可以直接转换为范围大的数据类型
大小排序

int类型以下(byte、short、char、int)运算默认提升为int,int以上计算提升为较大的类型
public class Demo_9{
public static void main(String[] args){
//自动类型提升
//小的范围的数据可以转换为范围大的数据类型
int i = 10;
double d;
//将小范围类型的数据i直接赋值给一个大范围数据类型d
d = i;
System.out.println(d);
//注意事项 重点:
//byte,short,char int这四个类型两两在进行运算的时候。不会提升为较大类型,而是直接
//提升为int类型
short b1 = 10;
short b2 = 20;
int b3 = b1 + b2;//b1 和b2运算后会默认提升为int类型
System.out.println(b3);
char c = 'a';
byte b = 1;
int s = c + b;
System.out.println(s);
int m = 100;
double dou = 200;
double sum = m + dou;
System.out.println(sum);
}
}
强制类型转换
大范围数据类型的变量/常量赋值给一个小范围数据类型的变量,需要进行强制转换。
格式
目标数据类型 变量名 = (目标数据类型)原数据类型变量名/原常量值;
强制类型转换可能会损失精度,得到错误的数据
小数类型强制转换为整数类型时,直接舍去小数部分,只保留整数部分
public class Demo_10{
public static void main(String[] args){
//强制转换
int i = 130;
//byte b = i;//报错,大范围的数据类型不能直接赋值给小范围的数据类型
//System.out.println(b);
//目标数据类型 变量名 = (目标数据类型)原数据类型变量名/原常量值;
byte b = (byte)i; //将i进行强制转换,转为byte类型
System.out.println(b);
// int -->00000000 00000000 00000000 10000010 = 128
double d = 12.12;
int id = (int)d;
System.out.println(id);
}
}
常量优化机制
在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在该数据类型取值范围内
给一个变量赋值,如果等于号的右边是常量的表达式并且没有一个变量,那么就会在编译阶段计算该表达式的结果,然后判断该表达式的结果是否在左边类型所表示范围内,如果在,那么就赋值成功,如果不在,那么就赋值失败。但是注意如果一旦有变量参与表达式,那么就不会有编译期间的常量优化机制
public class Demo_11{
public static void main(String[] args){
//【常量】优化机制
byte b = 10 + 20;
System.out.println(b);
byte b1 = 10;
byte b3 = b1 + 20;//编译会报错,此时没有常量优化机制。默认提升为int类型
System.out.println(b3);
}
}

浙公网安备 33010602011771号