当数据类型不一样的时候,将会发生数据类型的转换
一、自动类型转换(隐式)
- 特点:代码不需要进行特殊处理,自动完成
- 规则:数据范围必须是从小到大
代码例子说明:
public class Demo01DateType{
public static void main(String [] args){
//整数,默认类型为int
System.out.println(100);
//这是一个浮点数,默认类型为double
System.out.println(3.14);
//int类型=>long类型,符合从小到大规则,发生自动类型转换
long num1 = 100;
System.out.println(3.14);
//float类型=>double类型,符合从小到大规则,发生自动类型转换
double num2 = 2.5F
System.out.println(2.5);
//long类型=>float类型,符合从小到大规则,发生自动类型转换
float num2 = 30L;
System.out.println(30);
}
二、强制类型转换(显示)
- 特点:代码需要进行特殊的的格式处理,不能自动完成
- 格式:范围小的数据类型 范围小的变量名 = (范围小的数据类型)原本范围大的数据
注意:
- 强制转换一般不推荐使用,有可能损失精度、数据溢出
- byte/short/char这几种数据类型可以进行数学运算,如"+";
- byte/short/char这几种数据类型进行数学运算的时候,首先会被提升为int类型,然后再进行计算
- boolean不能进行数据类型转换
数据溢出的概念: 数据溢出 在计算机中,当要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出。 溢出原因 数据类型超过了计算机字长的界限就会出现数据溢出的情况
代码例子说明:
public class Demo02DateType{
public static void main(String [] args){
//Long类型强制转换成int类型 int类型数据100 本身没有超int的数据范围
int num1 = (int)100L;
System.out.println(num1);//输出100
//Long类型强制转换成int类型 int类型数据60亿 本身超出int的数据范围,必须加后缀L,这种情况存在数据溢出的情况
int num2 = (int)6000000000L;
System.out.println(num2);
//double类型强制转换成int类型,强制转换转换3.9变成了3,进度损失了
int num3 = (int)3.9;
System.out.println(num3);
char num4 = 'A';
System.out.println(num3+1);//输出66,字符A被当初了数字65,一旦char进行了数学运行,那么字符会按照一定的规则翻译成一个数字;
byte num5 = 45;
byte num6 = 45;
int result = num5 + num6;//byte+byte首先会被提升为int类型 int + int==int;
short num7 = 60;
short result2 = (short)(num5 + num7);//int类型强制转换从short类型
}
}