下面是最基本的数据类型比较。
说明几点:
1.也可以分为两大类:boolean类型和数值类型(主要为了数据转换时用)
(注意boolean不能与其他类型转换,把boolean赋予一个int等类型是不可以的)
2.String字符串并不是基本数据类型,字符串是一个类,就是说是一个引用数据类型。
3.若还需要用更高精度的浮点数,可以考虑使用BigDecimal类。
4.Java提供了三个特殊的浮点数值:正无穷大、负无穷大和非数,用于表示溢出和出错。例如使用一个正浮点数除以0将得到正无穷大(POSITIVE_INFINITY);负浮点数除以0得到负无穷大(NEGATIVE_INFINITY)。0.0除以0.0或对一个负数开方得到一个非数(NaN)。(都属于Double或Float包装类)
5.所有正无穷大数值相等,所有负无穷大数值都是相等;而NaN不与任何数值相等。
一、基本数值型类型的自动类型转换
这种很好理解,就是在基本类型中(boolean除外),可以系统自动转换把范围小的直接赋予范围大的变量。
一般是实行如下转换,不用特别标记
char → int → long → float → double
byte→short
public class AutoConversion { public static void main(String[] args) { int a = 6; float f = a;//int可以自动转为float byte b = 9; char c = b;//出错,byte不能转为char型 double d = b;//byte 可以转为double } }
PS:有一种比较特殊的自动类型转换,就是把基本类型(boolean也行)和一个空字符连接起来,可以形成对应的字符串。
public class Conversion { public static void main(String[] args) { boolean b = true; String str = b + ""; System.out.print(str);//这里输出true } }
二、强制类型转化
上面的自动类型只能把表数范围小的数值转化为大的,如果没有显性表示把大的转为小的,会发生编译错误。
public class Conversion { public static void main(String[] args) { int b = 233; byte c = (byte)b;//强制把一个int转为byte类型 System.out.println(c);//输出-23 float a = 5.6;//错误,因为5.6默认是double类型 float a = (float)5.6;//正确,要进行强制转化 double d = 3.98; int e = (int)d;//强制把一个double转为int类型 System.out.println(e);//输出3 } }
像上面一样,要执行表数大的范围转为小的,需要显性声明,若强制转化后数值过大,会造成精度丢失。
三、字符串(String)转换为基本类型
通常情况下,字符串不能直接转换为基本类型,但通过基本类型对应的包装类可以实现。
每个包装类都会有提供一个parseXxx(String str)静态方法来用于字符串转换为基本类型
Sting a = "45"; //使用Integer的方法将一个字符串转换为int类型 int iValue = Interger.parseInt(a); //boolean比较特殊,仅在字符串为true的情况下为true,其他为false boolean b = Boolean.valueOf(a);
四、将基本类型转换为字符串(String)
每个包装类都带有一个toString的方法,比如Double.toString(double d)等,可以转换为String字符串。
五、基本数据类型和包装类的转换
基本数据类型 | 包装类 |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
integer | Integer |
long | Long |
float | Float |
double | Double |
下面示例两者之间的互相转换
int i = 1; Integer iWrap = new Integer(i);//包装 int unWrap = iWrap.intValue();//解包装