1.整数默认类型:int
小数默认类型:double
2.基本类型按照取值范围从小到大排序:
byte->short->char->int->long->float->double
3.什么时候发生数据类型转换:
当等号左右两边类型不一致时
目录
1.自动类型转换
1.什么时候发生自动类型转换
取值范围大的数据类型 变量名 = 取值范围小的数据类型 -> 小类型自动提升为大类型
2.注意:
当取值范围小的类型和取值范围大的类型做运算,也会发生自动类型转换,小转大
public class Test01{
public static void main(String[] args){
/*
等号右边:100->默认类型是int
等号左边:long型的变量
将取值范围小的int型数据赋值给了取值范围大的long型,发生自动类型转换
*/
//long num1 = 100;
long num2 = 100L;
System.out.println(num2);
/*
等号右边:10->默认类型是int
等号左边:double类型的变量
将取值范围小的int型数据赋值给了取值范围大的double型,发生自动类型转换
int型的值转成double型的
*/
double num3 = 10;
System.out.println(num3);//10.0
double a = 2.5;
/*
当取值范围小的类型和取值范围大的类型做运算,也会发生自动类型转换,小转大
double = double+int
double = double+double
*/
double result = a+10;
System.out.println(result);
}
}
2.强制类型转换
1.什么时候需要强制类型转换
取值范围小的数据类型 变量名 = 取值范围大的数据类型 -> 报错,需要强转
2.怎么强转?
取值范围小的数据类型 变量名 = (取值范围小的数据类型)取值范围大的数据类型
public class Test02{
public static void main(String[] args){
/*
等号右边:2.5 默认类型为double型
等号左边:int型的变量
将取值范围大的类型取值给取值范围小的类型->报错->需要强转
*/
//int num1 = 2.5;
int num1 = (int)2.9;
System.out.println(num1);
int num2 = (int)100L;
System.out.println(num2);
/*
等号右边:2.5 默认类型double
等号左边:float
将取值范围大的类型取值给取值范围小的类型->报错->需要强转
*/
//float num3 = (float)2.5;
float num3 = 2.5F;
System.out.println(num3);
}
}
3.强转的注意事项
1.不要随意强转,强转容易导致数据精度损失,以及数据溢出
2.byte,short如果等号右边是常量,只要不超出byte和short的取值范围,不用强转,因为jvm自动强转了
byte,short如果等号右边有变量参与,结果再赋值给byte,short的变量,byte,short会自动提升为int,需要自己手动强转
3.char类型的数据一旦参与运算,也会被自动提升为int型
char类型一旦被变成int型,字符会自动去编码表中查询此字符对应的int值-> ASCII码表
如果字符在ASCII码表中找不到对应的int值,会去unicode码表(万国码)中查询
public class Test03{
public static void main(String[] args){
//精度损失
int num1 = (int)2.9;
System.out.println(num1);//2
/*
数据溢出现象
int型占4个字节 1个字节是8个二进制位
int型数据最多能用32位二进制表示
100亿换成二进制:36位二进制
比int多出来 4位 二进制,会把最前面的4位二进制干掉,这4位是溢出的
剩下的二进制算回十进制就是1410065408
*/
int num2 = (int)10000000000L;
System.out.println(num2);// 1410065408
}
}
public class Test04{
public static void main(String[] args){
byte num1 = 10;
System.out.println(num1);
/*
byte = byte+int
byte = int+int
*/
//byte result1 = num1+10;
byte result1 = (byte)(num1+10);
System.out.println(result1);
char num2 = 'a';
int result02 = num2+0;
System.out.println(result02);
System.out.println('a'+0);//97
System.out.println('A'+0);//65
System.out.println('0'+0);//48
System.out.println(' '+0);//32
System.out.println('中'+0);//20013
//自动类型转换 char类型的数据会自动提升为int型,去查码表了
int num3 = 'a';
}
}