首页 > 代码库 > 关于Java中转换机制整理

关于Java中转换机制整理


下面是最基本的数据类型比较。


144721_08_738.GIF

说明几点:

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字符串。


五、基本数据类型和包装类的转换


基本数据类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
integerInteger
longLong
floatFloat
doubleDouble

  下面示例两者之间的互相转换

int i = 1;
Integer iWrap = new Integer(i);//包装

int unWrap = iWrap.intValue();//解包装



关于Java中转换机制整理