前言
java有8种基本类型,分别有
基本数据类型 | 基本数据类型 |
byte | char |
short | float |
int | double |
long | boolean |
在java程序中,不同的类型需要进行转换。而转换有两种方式:自动转换和强制转换
1. 自动类型的转换
java中所有数值类型都可以互相转换,如下图所示:
如果把某种基本类型的值直接赋给另一种基本类型的变量时,则这种方式称为自动类型转换。因为把一个数值范围小的变量直接赋值给一个数值范围大的变量时,虚拟机可以进行自动转换;就好比有两瓶水,当我们把小瓶里的水倒入大瓶中时不会造成任何溢出,这当然没有任何问题了。
下面程序演示了自动类型转换
public static void main(String[] args) {
char ch = 'a';
// char可以直接转换成int
int cha = ch;
// 输出97
System.out.println(cha);
int a = 2;
// int类型可以直接转换为float
float b = a;
// 输出6.0
System.out.println(b);
byte byt = 9;
// byt不能转换成char,下面代码将报错
//char ch = byt;
// byte可以直接转换成double
double dd = byt;
// 下面将输出9.0
System.out.println(dd);
}
当任何基本类型与字符串值进行连接运算时,基本类型将自动转换成字符串类型。所以当我们希望把基本类型转换成对应的字符串时,可以把基本数据类型与空字符串进行连接。
public static void main(String[] args) {
String str = 3.5f + "";
// 下面将输出3.5
System.out.println(str);
// 下面将输出7hello
System.out.println(3 + 4 + "hello");
// 下面将输出hello34
System.out.println("hello" + 3 + 4);
}
对于表达式3 + 4 + "hello"
,会先执行3+4的运算,然后再进行7+hello的运算。而对于"hello" + 3 + 4
,会先执行hello+3运算,此时hello3是字符串,再和4进行连接运算,4也被认为是字符串进行处理了。
2. 强制类型转换
如果希望把上图中箭头右边的类型转换为箭头左边的类型,这就必须进行强制类型的转换了。就好比把大瓶子里的水倒入小瓶子中,就可能会造成溢出!
public static void main(String[] args) {
float f = 5.0f;
// 浮点型强制转换为整型
int a = (int)f;
// 下面将输出5
System.out.println(a);
int aa = 255;
// 整型强制转换为字节
byte b = (byte)aa;
// 下面将输出-1
System.out.println(b);
}
可以看到,将aa强制转换成byte类型时,造成了溢出。因为int类型是32位的,而byte是8位的,所以只保留了int类型的前8位,溢出部分则没有了