1.1 数据类型的转换

自动类型转换、强制类型转换

1.1.1 数据类型的自动转换

自动转换数据类型需注意:
(1)转换前的数据类型与转换后的数据类型兼容
(2)转换后的数据类型的表示范围比转换前的类型大
(3)类型的转换只限该行语句,并不会影响原先定义的变量类型,通过类型的自动转换可以保证数据的精确度。这种转换方式也称为扩大转换。
public class DataDemo08{
public static void mian(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));
}
}
运行结果:
x/y = 1.3519603
10/3.5 = 2.857142857142857
10/3 = 3
从结果可以发现,in类型与float类型进行计算之后,输出的结果会变成float类型,一个整型常量和一个浮点型常量进行计算之后,结果也会变为一个浮点数据,而如果是两个int类型的常量进行计算,最终结果还是int类型,而其小数部分将会被忽略。
也就是说,假设有一个整数和双精度浮点数作运算时,Java会把整数转换成双精度浮点数后再作运算,运算结果也会变成双精度浮点数。
String可以像普通变量那样直接通过赋值的方式进行声明。字符串是使用“”括起来的。两个字符串之间可以使用“+”进行连接。
任何数据类型碰到String类型的变量或常量之后都向String类型转换。(String 是什么)
publci class DataDemo09{
public static void main(String[] args){
String str = test;
int x = 30;
str = str + x;
System.out.println(str =  + str);
}
}
程序运行结果:
str = test 30
public class DataDemo10 {
public static void main(){
int i = 1;
int j = 2;
System.out.println(1+2 =  + i + j);
}
}
运行结果:
1+2=12
从以上的输出结果中可以发现,程序的主要目的是要计算i+j的值,但是由于碰到了字符串常量,所以所使用的数据类型都会变为字符串常量,也就是说此时的“+”实际上表示的是字符串连接的含义,对于以上的程序,如果要得到正确的结果,则必须修改为:
System.out.println(1+1 =  + (i+j)); //加上括号之后,就表示输出时先计算两个数字相加的结果。

1.1.2 数据类型的强制转换

当两个整数进行运算时,其运算的结果也会是整数。但是,当做整数除法8/3的运算时,其结果为整数2,并不是实际的2.33333…,因此,在Java中若是想要得到计算的结果是浮点数时,就必须将数据类型做强制性的转换,转换语法如下:
(要转换的数据类型)变量名称。
整数类型与浮点数类型的转换:
public class DataDemo11{
public static void main(String[] args){
float f = 30.3f;
int x = (float)f;
System.out.println(x = +x);
System.out.println(10/3 = +((float)10/3));
}
}
运行结果:
x = 30
10/3 = 3.3333333
在程序中,首先将一个浮点型的变量f的内容赋给了int型变量x,因为int数据类型的长度小于float类型的长度所以此处需要进行强制转换。程序的最后使用了两个整型常量进行计算但是因为将其中的一个整型变量变为了float类型,所以在计算时会强制把其他的整型也变为float类型,所以计算结果是包含小数的。