1、自动类型转换
图中所示,箭头左边的数值型可以自动类型转换为箭头右边的数值型。
看代码:
public class AutoConversion
{
public static void main(String[] args){
int a = 6;
//int可以自动转换为float类型
float f = a;
//下面将输出6.0
System.out.println(f);
//定义一个byte类型的整数变量
byte b = 9;
//下面代码将出错,byte型不能自动类型转换为char型
//char c = b;
//线面是byte型变量可以自动类型转换为double型
double d = b;
//下面将输出9.0
System.out.println(d);
}
}
2、强制类型转换
如果希望把图中箭头右边的类型转换为左边的类型,则必须使用强制类型转换。格式:(targetType)value
看代码:
public class NarrowConversion
{
public static void main(String[] args){
int iValue = 233;
//强制把一个int类型的值转换为byte类型的值
byte bValue = (byte)iValue;
//将输出-23
System.out.println(bValue);
double dValue = 3.98;
//强制把一个double类型的值转换为int
int tol = (int)dValue;
//将输出3
System.out.println(tol);
}
}
3、表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。
如下规则:
:所有byte型,short型,char型将被提升到int型。
:整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。(如上图示,位于箭头右边的等级高于位于箭头左边类型的等级)
看代码:
byte b = 40;
char c = 'a';
int i = 23;
double d = .314;
//右边表达式在最高等级操作数为d(double型),则右边表达式的类型为double型,故赋值给一个double型变量
double result = b+c+i*d;
//将输出144.222
System.out.println(result);
如果表达式中包含了字符串,则是另外一种情形了。因为把加号放在字符串和基本类型值之间,代表字符串连接运算符,而不是加法运算。
看代码:
//输出字符串hello!a7
System.out.println("hello!"+'a'+7);
//输出字符串104hello!
System.out.println('a'+7+"hello");
对于第一个表达式,先进行"hello"+'a'的运算,把'a'转换成字符串,拼接成字符串hello!a,接着进行"hello!a"+7运算,这也是字符串连接运算,得结果 hello!a7。
对于第二个表达式,先进行'a'+7加法运算,'a'自动提升到int型,变成a对应的ASCII值:97,加上7得到104,再进行字符串连接运算,得结果104hello!。