Java所提供的7种数值类型之间可以进行相互转换,有两种类型转换方式:自动类型转换和强制类型转换。
自动类型转换
如果系统支持把某种基本类型的值直接赋予给另一种基本类型的变量,这种方式称为自动类型转换。当把表示范围小的数值或变量直接赋给另一个表数范围较大的变量的时候,系统将可以进行自动类型转换,否则就需要强制转换。
当把任何基本类型的值和字符串值进行连接操作的时候,基本类型的值将会自动转换为字符串类型。
实例代码如下:
package Chapter03;
public class PrimitiveAndString {
public static void main(String[] args) {
String str2=3.6f+"";
System.out.println(str2);
System.out.println(3+4+"Hello! ");
System.out.println("Hello! "+3+4);
}
}
//运行结果
//3.6
//7Hello!
//Hello! 34
强制类型转换
如果是把下面的这个图反过来转换,那就必须进行强制转换。
强制转换的语言是(targetType)value
,强制转换的运算符是()
。实例:
package Chapter03;
public class NarrowConversion {
public static void main(String[] args) {
int iValue=233;
byte bValue=(byte)iValue;
System.out.println(bValue);
double dValue=3.98;
int tol=(int)dValue;
System.out.println(tol);
}
}
//输出
//-23
//3
那么int类型的数据是如何转换到byte的数据并得到-23的?我们知道,int类型数据在Java中以32位进行存储,而byte数据以8位进行存储。所以转换关系如下图,计算机中以补码形式处理和存储数据,所以得转换为原码
在Java中有一行容易出错的代码:
float a = 5.6;
其中,5.6默认为double类型的数据,所以将5.6赋予给float类型将发生错误,必须使用强制转换类型。
通常情况下,字符串不能转换为基本类型,但是通过基本类型对应的包装类可以实现把字符串转换为基本类型。
String a = "45;
int iValue = Integer.parseInt(a);
表达式类型的自动提升
当一个算术表达式中包含多个基本类型的时候,整个算术表达式将会发生自动提升。
- 所有byte类型、short类型和char类型将被提升到int类型
- 整个算术表达式将自动提升到与表达式最高等级操作数同样的类型。
下面展示一些典型的错误:
short value = 5;
value = value -2;
以上代码错误,因为value -2
将自动转换到int
类型,所以将int
类型赋值给short
类型将发生错误。