Java 提供的7种基本数据类型可以互相转换,有2种转换方式:自动类型转换和强制类型转换。
1 自动类型转换
如果系统支持把某种基本类型的值直接赋值给另一种基本类型的变量,则这种方式被称为自动类型转换。
基本数据类型转换
当把一个表数范围小的数值或变量直接赋值给另一个表数范围大的变量时,系统可以进行自动类型转换,否则就要进行强制类型转换。
上图的左边可以自动类型转换成右边
注char与byte,char与short无法自动转换
public class AutoConversion{
public static void main(String[] args){
//int转换成float
int a=1;
float f=a; //输出1.0
}
}
基本数据类型转String
字符串类型不是基本类型,而是引用类型。
当把任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转换为字符串类型。
public class ToString{
public static void main(String[] args){
String s1=3.5f+""; //s1="3.5"
String s2=1+2+""; //s2="3"
String s3="0"+1+2; //s3="012"
}
}
2 强制类型转换
如果范围大的数转换为范围小的数,则可能会引起溢出,从而造成数据丢失。这种转换页被称为“缩小转换(Narrow Conversion)”。
public class NarrowConversion{
publci static void main(String[] args){
int a=233;
byte b=(byte)a; //b=-23
}
}
字符串不能直接转换为基本类型,但是可以通过包装类
String s="12";
int a=Integer.parseInt(s);
boolean - Boolean
byte - Byte
short - Short
int - Integer
long - Long
char - Character
float - Float
double - Double
8个包装类都提供了一个parseXxx(String str)
关于float类型:
float f=5.6 这样会出现错误,因为5.6默认是double类型
所以应该为:float f=(float)f;
3 表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义了如下提升规则:
- 所有byte类型、short类型、char类型将被提升到int类型
- 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。