定义:
当数据不一样时,将会发生数据类型转换。
自动类型转换(隐式):
- 特点:代码不需要进行特殊处理,自动完成。
- 规则:数据范围从小到大。(与字节数没有特定关系)
public class Demo1DataType{
public static void main(String[] args){
System.out.println(1024);//这就是一个整数,默认就是int类型
System.out.println(3.41);//这就是一个浮点数,默认就是double类型
//左边是long类型,右边是默认的int类型,左右不一样
//一个等号表示赋值,将右侧的int常量,交给左侧的long变量进行存储
//int --> long 符合了数据范围从小到大的要求
//这一行代码发生了自动类型转换
long num1 = 100;
System.out.println(num1);//100
//左边是double类型,右边是float类型,左右不一样
//float--> double,符合从小到大的规则
//也发生了自动类型转
double num2 = 2.5;
System.out.println(num2);
//左边是float类型,右边是long类型,左右不一样
//long-->float,范围是float更大一些,符合从小到大的原则
//也发生了自动类型转换
float num3 = 30L;
System.out.println(num3);//30.0
//浮点类型是有小数点的,本来30是整数,转换后自动加了点零成了30.0
}
}
强制类型转换(显式):
强制类型转换
1.特点:代码需要进行特殊的格式处理,不能自动完成
2.格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大数据
例如
public class Demo02DataType{
public static void main(String[] args){
int num = 100L;
System.out.println(num);
}
}
左边int类型,赋的值是long类型,不一样,long—>int,不是从小到大,不能发生自动转换输出也会报错。
应用强制转换的格式来写
即:
public class LianXi{
public static void main(String[] args){
int num1 = (int) 100L;
System.out.println(num1);
}
}
这样就把数据类型为long类型的‘100‘转换成了类型为int类型的’100‘
数据溢出
//需要转化的数值不能超过转化的数值类型的表示范围,否则会发生数据溢出。输出的结果就不是想要的到的结果。
public class Demo02DataType{
public static void main(String[] args){
int num = (int)3000000000 L;
System.out.println(num);//输出1705032704
}
}
精度损失:
public class Demo02DataType{
public static void main(String[] args){
int num = (int)3.5
System.out.println(num);//输出3
}
}
// 对于一个小数来说,如果强制转换为整数,那么小数部分会直接丢失,只保留整数部分(不是四舍五入),叫做精度损失。
注意事项
- 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
- byte/short/char/这三种类型都可以发生数学运算例如加法“+”。
public class Demo02DataType{
public static void main(String[] args){
char zifu1 = 'A';//这是一个字符型变量,里面是大写字母A
System.out.println(zifu1);//A
System.out.println(zifu1 + 1);//66,也就是大写字母A被当做65处理。
//计算机底层会用一个数字(二进制)来代表字符A,就是65
//一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成为一个数字
}
}
- byte/short/char这三中类型在发生运算时,都会首先被提升为int类型,然后在进行计算。
public class Demo02DataType{
public static void main(String[] args){
byte num1 = 40;
byte num2 = 50;
//计算之前会先提升为int,即:byte + byte--> int + int-->结果肯定是int
int result1 = num1 + num2;
System.out.println(result1);
short num3 = 60;
//byte + short-->int + int
//一定要使用int接收
int result2 = num1 + num3;
System.out.println(result2);
//也可以用强制类型转换
/*
short result = (short)(num1 + num3) */
}
}
- Boolean类型不能发生数据类型转换。