天天看點

類型轉換與強制轉換

自動轉換:

舉一個例子:把一個小的東西放到一個大的盒子裡,是件非常容易的事,不用做任何改變,在這裡了解成自動轉換。若把一個大的東西放到一個小的盒子,那就要對這個東西做些舍棄,加工一下,強制把它放進小盒子裡,可了解成強制類型轉換。

byte->short->int->long->float->double

如果要把一個大類型塞到小類型中去,就要進行強制轉換。

類型轉換發生的時機:

1)指派運算

2)算術運算

3)方法調用

自動類型轉換舉例(int類型自動轉換成float類型):

    int

i=7;

    float

j=1.0f;

sum=i+j;//傳回8.0

強制類型轉換舉例(float類型強制轉換成int類型):

int

i=2;     

float j=1.0f;

int sum=(int)(i+j);//傳回3

注:char可以自動類型轉換成int。

何為相容:<b>隻有數字類型(包括整型和浮點)相容,數字類型和</b><b>CHAR</b><b>或</b><b>BOOLEAN</b><b>是不相容的。</b><b>CHAR</b><b>和</b><b>BOOLEAN</b><b>不相容。</b>

<b>二、字元串與其它資料類型的轉換</b>

1)從Integer類對象中把資料以int類型取出方法有兩個:類級别的“parseInt”、對象級别的“intValue”。intValue不需要任何參數,直接調用,前提必須有Integer類對象。 如隻想把字元串類型的數字轉換成int類型數字,可以直接使用parseInt方法。

   intValue方法可以用來取得Integer對象所存放的int數值,也可以通過類似的方法來轉換其他的基本資料類型,boolean,char除外。byte,short,long,float,double分别對應方法byteValue,shortValue,longValue,floatValue,doubleValue。

舉例:String-&gt;int

      Integer

s = new Integer(str);

      int

s1=s.intValue();

s1=Integer.parseInt(str);

2)和parseInt相反的是"toString"這個方法,這個方法是對象級别的,即将對象轉換成字元串。當使"+"運算符将對象同一字元串連接配接,Java編譯器會自動調用"toString"方法。

舉例:int-&gt;String

      Integer.toString(10);//傳回10

另外一個類似方法,object.valueOf( ) 方法,它傳回的是Integer對象。

a = 12345;

String b = String.valueOf(a);//傳回12345

<b>三、類與類之間的類型轉換</b>

類與類之間的轉換隻能用在父子類上,不能用在兄弟類,更不能用在根本不相關的兩個類之間。子類轉換成父類屬于自動類型轉換,父類轉換成子類屬強制類型轉換。

再補充一個例子:

 1 class A {

 2     void sum(double a, double b) {

 3         System.out.println("a + b = " + (a + b));

 4     }

 5 }

 6 

 7 class B {

 8     public static void main(String args[]) {

 9         A ob = new A();

10         ob.sum(10, 20);// 兩個int型參數

11     }

12 }

程式輸出:

a + b = 30.0

這裡說明在方法調用時發生自動類型轉換。A中定義sum(double,double),我在B中調用sum(int,int)方法,但A中不存在此方法。是以Java

将int型擴大到double型,然後調用sum(double,double) 。當然,如果A中定義了sum(int,int)

,當然會調用sum(int,int),而不會調用sum(double,double) 。