自动类型转换
首先我们来看自动类型转换。自动类型转换有两个条件。
(1)转换前后的数据类型兼容;
(2)转换后的数据类型的范围大于转换前的数据类型。
因此可以得到如下的自动转换图。

现在我们看一个例子说明一下自动类型转换的应用。
public static void main(String[] args){
int x=30;
float y=22.19f;
System.out.println("x/y= "+(x/y));
System.out.println("10/3.5= "+(10/3.5));
System.out.println("10/3= "+(10/3));
}
代码中,第一行输出为int与float的变量运算,按照自动类型转换,int类型自动转换为float,所以最终的结果也是float类型。
第二行输出为int与double的常量运算,按照自动类型转换,int类型自动转换为double,所以最终的结果也是double类型。
第三行输出为两个int的常量运算,不需要做类型的转换,因此结果也是一个int常量。
实测的输出如下,与我们的推断相同。
x/y= 1.3519603
10/3.5= 2.857142857142857
10/3= 3
强制类型转换
对于强制类型转换,使用的格式如下:
(要转换的数据类型)变量名称
转化的方法则是舍弃掉小类型不存在的位数。这种强制类型的转换是在程序代码中完成的,因此称为显式转换。以下的程序说明了如何在整数与浮点数之间转换。
public static void main(String[] args){
float f=30.3f;
int x=(int)f;
System.out.println("x= "+x);
System.out.println("10/3= "+(10/3));
System.out.println("(float)10/3= "+((float)10/3));
}
其中x是将float型强制转换为int型,舍弃掉了小数部分,应该得到30.
10/3是两个int类型相除,应该得到整数,而使用强制类型转换后将10转为float常量,那么结果就应该是float类型。
结果如下:
x= 30
10/3=3
(float)10/3=3.3333333
String类型转换
除了自动类型转换和强制类型转换还存在一种转换,即所有类型都向String类型转换。String是一个Java内置的字符串类,将一系列字符序列用双引号""引起来,用来表达一系列char类型的字符的序列。基本类型与String类用+连接就会自动转为String类。如下是字符串与基本类型用+连接的示例。
public static void main(String[] args){
String str="hello java";
int x=10,i=1,j=1;
str =str+x;
System.out.println("str= "+str);
System.out.println("1+1= "+i+j);
}
输出结果为:
str= hello java 10
1+1= 2
我们可以看出,+可以连接两个字符串。而且,只要字符串与其他类型相加就会自动转化为字符串类型。例如int类型的10就会转为字符串"10",然后再和str相连接。下面的字符串常量也是同样的道理。我们可以使用一个空字符串+一个任意类型将它转换为字符串类型。
public static void main(String[] args){
String str1=""+10;
String str2=""+12.33f;
String str3=""+23.57;
String str4=""+true;
System.out.println("str1= "+str1);
System.out.println("str2= "+str2);
System.out.println("str3= "+str3);
System.out.println("str4= "+str4);
}
str1= 10
str2= 12.33
str3= 23.57
str4= true
我们可以看到:这样就把其他基本类型转化为String类型了。
595

被折叠的 条评论
为什么被折叠?



