在程序中经常会用到不同的数据类型的变量之间的计算和相互赋值,这个时候就会用到变量类型的转换
一、自动类型转换
1.整型和浮点型变量的自动转换
整型和浮点进行计算赋值时,会自动的将数据类型从低转到高。
低------------------------------->高
byte->short->int->long->float->double
byte b = 100;
short s = 200;
s = b;//这里b会自动转成short,然后赋值给s
b = s;//这里提示错误
编辑器会提示:需要的是byte类型,但提供的是short
public static void main(String[] args) {
byte b = 100;
short s = 200;
int i = 300;
long l = 400;
float f = 500.55f;
double d = 600.33;
s = b;
i = s;
l = i;
f = l;
d = f;
System.out.println("b = " + b);
System.out.println("s = " + s);
System.out.println("i = " + i);
System.out.println("l = " + l);
System.out.println("f = " + f);
System.out.println("d = " + f);
}
运行结果:
b = 100
s = 100
i = 100
l = 100
f = 100.0
d = 100.0
2.char类型到整型的自动转换
char类型不能自动转换成byte和short类型
public class VariableTypeTransform2 {
public static void main(String[] args) {
char c = 'A';
byte b;
short s;
b = c;
s = c;
}
}
运行结果:
提示char型到byte和short不能自动转换。
char类型可以自动转换成int,long,float和double,自动转换时将char类型变量的Unicode码的值付值给相应的变量。
public class VariableTypeTransform2 {
public static void main(String[] args) {
char c = 'A';
int i;
long l;
float f;
double d;
i = c;
l = c;
f = c;
d = c;
System.out.println("c = " + c);
System.out.println("i = " + i);
System.out.println("l = " + l);
System.out.println("f = " + f);
System.out.println("d = " + f);
}
}
运行结果:
c = A
i = 65
l = 65
f = 65.0
d = 65.0
二、强制转换
在前面提到的当变量类型从低到高赋值时会自动转换。而从高到低赋值时会出现错误。那么如果将变量的值从高到低赋值呢?就要用到强制转换。
转换的方式:
(type)var; type是要转换成的类型,var是待转换的变量。
如:(int)s 把变量s的类型强转换成int
public class VariableTypeTransform3 {
public static void main(String[] args) {
byte b;
short s = 100;
char c = 'a';
b = (byte)s;
s = (short)c;
System.out.println("b = " + b);
System.out.println("s = " + s);
}
}
运行结果:
b = 100
s = 97
注1: 强制转换时两个类型要是可以兼容的。
注2: 转换过程中可能会产生溢出。
三、字符串的转换
我们在代码的例子中也多次用到字符串的转换。整型,浮点,char, 布尔型的变量都可以直接和字符串的类型相加,即可自动转为字符串类型。
int i = 100;
System.out.println("i = " + i);
"i = “,这个字符串和变量b相加后会把变量的值变成字符串"100”,然后再把两个字符串拼接起来变成:“b = 100”
所以上述代码最终会输出
b = 100