类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将
String类型的数据“457”转换为数值型,也可以将任意类型的数据转换为String类型。如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换时,则会有信息丢失,有可能失败。本文来介绍数据类型转换的两种方式,即隐式转换与显式转换。
1.类型转换的简单理解
想象有一片内存,源和目标分别是两个大小不同的内存块(由变量和数据的类型来决定),将源数据赋值给目标内存的过程就是用目标内存块尽可能多地套取源内存中的数据。
2.隐式类型转换
从低级类型向高级类型转换的时候系统将会自动执行,这种类型的转换被称为隐式转换。在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为 (byte,short,char)–> int –> long –> float –> double。
例如int自动转化为double类型:
public static void main(String[] args) {
int x=8; //声明int类型变量
double y=x; //将x赋值给y,y的值为8.0
System.out.println("y = " + y);
int a = 6;
double b = 3.0;
//int / double -> double / double,a 提升为double类型
System.out.println(a/b);
}
//输出结果:
// y = 8.0
// 2.0
隐式转换也需要遵循一定的规则来解决在什么情况下将哪种类型的数据转换成另一种类型的数据。转换规则见下表:
| 操作数1的数据类型 | 操作数2的数据类型 | 转换后的数据类型 |
|---|---|---|
| byte\short\char | int | Int |
| byte\short\char\int | long | long |
| byte\short\char\int\long | float | float |
| byte\short\char\int\long\float | double | double |
3.显式类型转换
把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换(也被称为强制类型转换):
public static void main(String[] args) {
// 语法格式:(类型名)要转换的值
int a=(int) 45.25;
System.out.println(a);
long l = (long) 23.6F;
System.out.println(l);
int b = (int) 'b';//ascii码
System.out.println(b);
}
//输出结果:
// 45
// 23
// 98
执行显式类型转换的时候,可能会导致精度的损失。除boolean类型外,其他基本类型都能以显式类型转换的方式实现转换。
注意:当把整数赋值给一个 byte、short、int、long 型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换,例如:
byte b1 = (byte) 129;
System.out.println(b1);
//输出结果:
// -127
4.拓展:字符串与其它数据类型的转换
其它类型向字符串的转换
- 自动转换:S+“”;
- 使用String的方法:String.volueOf(S);
public static void main(String[] args) {
int num= 531;
System.out.println("num=" + num);
int num1=5310;
System.out.println("String.valueOf(num1) = " + String.valueOf(num1));
}
//输出结果:
// num=531
//String.valueOf(num1) = 5310
字符串作为值,向其它类型的转换
- 静态parseXXX方法
String s = "d";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );