Java基本数据类型转换(强制类型转换(⼿动)隐式类型转换(⾃动))基本数据类型转换
为什么需要数据类型转换?
答:因为java是强类型语⾔,要求执⾏“赋值运算”和“算术运算”的类型保持⼀致
基本数据类型转换的两种⽅式
1. 隐式类型转换(⾃动)
2. 强制类型转换(⼿动)
哪些基本数据类型可参与基本数据类型转换?
除了布尔类型外,其余的基本数据类型都可相互转换
隐式类型转换(⾃动)
核⼼:低字节向髙字节⾃动提升
byte(1字节)–>short(2字节)–>int(4字节)–>long(8字节)–>float(4字节)–>double(8字节)
char(2字节)–>int(4字节)
代码展⽰:
public class Demo{
public static void main(String[] args){
char a ='a';
int num = a;
System.out.println(num);//97
}
}
代码展⽰:
public class DataTypeDemo{
public static void main(String[] args){
byte buf =12;
// 将buf从byte类型隐式类型转换为了short类型
short copyBuf = buf;
System.out.println(copyBuf);// 18;
short age =100;
// 将age从short类型隐式类型转换为了int类型
int copyAge = age;
System.out.println(copyAge);// 100
int year =2019;
// 将year 从int类型隐式类型转换为了long类型
long copyYear = year;
System.out.println(copyYear);// 2019
long num =14575642145L;
// 将num从long类型隐式类型转换为了float类型
float copyNum = num;
System.out.println(copyNum);// 1.45756426E10
float f =3.14f;
// 将f从float类型隐式类型转换为了double类型
double d = f;
System.out.println(d);// 3.140000104904175
java变量的数据类型分为两种}
}
运⾏截图:
赋值运算:
规律:低字节向⾼字节⾃动提升
特例:把int类型的常量赋值给byte类型、short类型和char类型的变量或者final修饰的常量时,没有任何问题。代码展⽰:
public class DataType{
public static void main(String[] args){
final int CONSTANT_NUM =127;
byte copyNum = CONSTANT_NUM;
final int CONSTANT_NUM1 =20000;
short copyNum1 = NUM1;
final int CONSTANT_NUM2 =97;
char copyNum2 = NUM2;
System.out.println(copyNum);// 127
System.out.println(copyNum1);// 20000
System.out.println(copyNum2);// a
}
}
代码展⽰:
public class DataType{
public static void main(String[] args){
byte num =127;
short num1 =20000;
char num2 =97;
final int num3 =189;
System.out.println(num3);// 189        System.out.println(num);// 127
System.out.println(num1);// 20000        System.out.println(num2)// a
}
}
代码展⽰:
public class DataTypeDemo{
public static void main(String[] args){
int num =10;
long num1 = num;
System.out.printlb(num1);//10
}
}
运⾏截图:
画图分析:
前提:两个不同类型的操作数,进⾏运算时,会触发隐式类型转换
规律:
若两个操作数其中有⼀个是double类型,另⼀个就会隐式类型转换为double类型
否则,若两操作数中其中有⼀个是float类型,另⼀个就会隐式类型转换为float类型
否则,若两操作数中其中有⼀个long类型,另⼀个就会隐式类型转换为long类型
若两个操作数中即没有long类型,也没有float类型,也没有double类型,那最终的结果就为int类型
代码展⽰:
// 若两个操作数中有⼀个为double类型,另⼀个就会隐式类型转换为double类型
public claas DoubleTest1{
public static void main(String[] args){
double d =3.14;
float f =3.14f;
// 错误写法:
float  f1 = d + f;
System.out.println(f1);
}
}
运⾏截图:
代码展⽰:
// 若两个操作数中有⼀个为double类型,另⼀个就会隐式类型转换为double类型
public claas DoubleTest1{
public static void main(String[] args){
double d =3.14;
float f =3.14f;
// 正确写法:
double f1 = d + f;
System.out.println(f1);// 6.280000104904175
}
}
运⾏截图:
代码展⽰:
// 若两个操作数中有⼀个为float类型,另⼀个就会隐式类型转换为float类型
public class FloatTest{
public static void main(Sting[] args){
float f =3.4f;
int a =12;
float sum = f + a;
System.out.println("Sum = "+ sum);// Sum = 15.14
}
}
代码展⽰:
// 若两个操作数中有⼀个为long类型,另⼀个就会隐式类型转换为long类型
public class LongTest{
public static void main(String[] args){
long millons =10000000000L;
float a =12.1;
long  b = millons +(int)a;
System.out.println("b = "+ b);//b = 10000000012
}
}
运⾏截图:
代码展⽰:
// 若两个操作数中既没有long类型,也没有float类型,也没有double类型,那最终的结果为int类型public class IntTest{
public static void main(String[] args){
byte num =10;
short num1 =20;
// 错误写法:
short sum = num + num1;
System.out.println("Sum = "+ sum);
}
}
编译出错截图:
代码展⽰:
// 若两个操作数中既没有long类型,也没有float类型,也没有double类型,那最终的结果就为int类型public class IntTest{
public static void main(String[] args){
byte buf =10;
short buf1 =20;
int sum = buf + buf1;
System.out.println("Sum = "+ sum);// sum = 30
}
}