隐式转换(自动转换)
低字节类型的数据一般可以自动转为高字节类型的数据,比如:
将int类型的变量i赋给double类型的变量d
int i=1;
double d=i;
分析:变量i发生隐式转换,得到小数1.0,并赋给变量d,但是变量i的类型仍然是int类型,并且i里面的内容还是整数1.
整数跟小数进行算术运算,整数会发生隐式转换
System.out.println(1.0/2);
分析:整数2发生隐式转换,得到小数2.0,1.0/2.0的结果为0.5
低字节类型的整数进行算术运算,会发生隐式转换
byte a=127;
byte b=1;
System.out.println(a+b);
分析:a和b进行加运算会发生隐式转换,得到int类型的整数127和1,相加的结果为int类型的整数128.
但是,也存在从较高字节类型的数据自动转为较低字节类型的数据的情况,比如:
将int类型的直接量赋给byte类型的变量
byte b=127;
分析:int类型的整数127发生隐式转换,得到byte类型的整数127,并赋给变量b
将int类型的直接量赋给short类型的变量
short s=32767;
分析:int类型的整数32767发生隐式转换,得到short类型的整数32767,并赋给变量s
将int类型的直接量赋给char类型的变量
char ch=65535;
分析:int类型的整数65535发生隐式转换,得到char类型的字符,并赋给变量ch
将long类型的变量赋给float类型的变量
long x=3L;
float y=x;
分析:long类型的变量x发生隐式转换,得到float类型的小数3.0f,并赋给变量y,但是变量x的类型仍然是long类型,并且x里面的内容还是整数3L.
将int类型的计算结果赋给byte类型的变量
byte a=127;
byte b=1;
a+=b;
分析:a和b做加运算会发生隐式转换,得到int类型的整数127和1,加运算的结果128(int类型)也发生隐式转换,得到byte的整数-128(数据溢出),并赋给变量a
整数类型的数据可以转成字符串类型的数据,比如:
整数类型的数据自动转成字符串类型的数据
int a=100;
String str=a+"";
分析:变量a会发生隐式转换,得到字符串类型的数据”100”
注意:
变量发生隐式转换,会得到目标数据类型的数据,但是,不会改变该变量的数据类型以及里面的数据。
强制转换(手动转换)
高字节类型的数据可以通过强制转换得到低字节类型的数据,可能会发生数据溢出,导致计算错误。
小数类型的数据通过强转可以得到整数类型的数据
double a=3.142;
int b=(int)a;
分析:变量a发生强制转换,得到int类型的整数3,并赋给变量b,但是变量a的数据类型仍然是double类型,并且里面的数据还是小数3.142
数值格式的字符串可以转成数值类型的数据
String str="100";
int i=Integer.parseInt(str);
分析:通过手动转换,得到int类型的整数100,并赋给变量i
整数类型的数据可以转成字符串类型的数据
int a=100;
String str=String.valueOf(a);
分析:通过手动转换,得到字符串类型的数据”100”,并赋给变量str
注意:
变量发生强制转换,会得到目标数据类型的数据,但是,不会改变该变量的数据类型以及里面的数据。