基本数据类型的转换
类型转换有两种方式:自动类型转换和强制类型转换。
自动类型转换:
定义:当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统可以进行自动类型转换,否则就需要强制类型转换。
通俗的讲:有两瓶水,当把小瓶里的水倒入大瓶中时,不会有任何问题。
下图所示,箭头左边的数值类型可以自动类型转换为箭头右边的数值类型。
注:当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型。如果希望把基本数据类型的值转换为字符串时,可以把基本数据类型的值和一个空字符串进行连接。如:
String str = 3.5f + "";
//下面输出字符串3.5
System.out.println(str);
//下面语句输出7Hello!
System.out.println(3 + 4 + "Hello!");
//下面语句会输出Hello!34
System.out.println("Hello!" + 3 + 4);
强制类型转换:
即将上面图片箭头右边的类型转换为左边的类型,则必须进行强制类型转换,强制类型转换的语法格式是:(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);
}
}
在上述程序中:
1.将233强制转换为byte类型,从而变成23,这就是典型的溢出。
将32位的int类型赋给8位的byte类型,将会截断前面的24位,只保留最右边的8位,然后将该补码转换为原码,计算成十进制得-23。
2.将一个浮点数强制类型转换为整型时,会直接截断浮点数的小数部分。
注:在通常情况下,字符串不能直接转换为基本数据类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。例如,把字符串转换为int类型,可通过如下代码实现:
String a = "45";
//使用Integer的方法将一个字符串转换成int类型
int iValue = Integer.parseInt(a);
java的8种基本类型都提供了对应的包装类:boolean对应Boolean、byte对应Byte、short对应Short、int对应Integer、long对应Long、char对应Char、float对应Float、double对应Double,8个类都提供了一个parseXxx(String str)静态方法用于将字符串转换成基本类型。