一、簡(jiǎn)單數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換
兩種數(shù)據(jù)類(lèi)型相互轉(zhuǎn)換首先要類(lèi)型兼容。根據(jù)目的數(shù)據(jù)類(lèi)型的范圍與原數(shù)據(jù)類(lèi)型的范圍,將類(lèi)型轉(zhuǎn)換分自動(dòng)類(lèi)型轉(zhuǎn)換(放大轉(zhuǎn)換)和強(qiáng)制類(lèi)型轉(zhuǎn)換(縮小轉(zhuǎn)換)。
舉一個(gè)例子:把一個(gè)小的東西放到一個(gè)大的盒子里,是件非常容易的事,不用做任何改變,在這里理解成自動(dòng)轉(zhuǎn)換。若把一個(gè)大的東西放到一個(gè)小的盒子,那就要對(duì)這個(gè)東西做些舍棄,加工一下,強(qiáng)制把它放進(jìn)小盒子里,可理解成強(qiáng)制類(lèi)型轉(zhuǎn)換。
byte->short->int->long->float->double
這樣的順序是屬于放大且自動(dòng)類(lèi)型轉(zhuǎn)換,反過(guò)來(lái)就屬于縮小且強(qiáng)制類(lèi)型轉(zhuǎn)換。
類(lèi)型轉(zhuǎn)換發(fā)生的時(shí)機(jī):
1)賦值運(yùn)算
2)算術(shù)運(yùn)算
3)方法調(diào)用
自動(dòng)類(lèi)型轉(zhuǎn)換舉例(int類(lèi)型自動(dòng)轉(zhuǎn)換成float類(lèi)型):
int i=7;
float j=1.0f;
float sum=i+j;//返回8.0
強(qiáng)制類(lèi)型轉(zhuǎn)換舉例(float類(lèi)型強(qiáng)制轉(zhuǎn)換成int類(lèi)型):
int i=2;
float j=1.0f;
int sum=(int)(i+j);//返回3
注:char可以自動(dòng)類(lèi)型轉(zhuǎn)換成int。
二、字符串與其它數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
1)從Integer類(lèi)對(duì)象中把數(shù)據(jù)以int類(lèi)型取出方法有兩個(gè):類(lèi)級(jí)別的“parseInt”、對(duì)象級(jí)別的“intValue”。intValue不需要任何參數(shù),直接調(diào)用,前提必須有Integer類(lèi)對(duì)象。 如只想把字符串類(lèi)型的數(shù)字轉(zhuǎn)換成int類(lèi)型數(shù)字,可以直接使用parseInt方法。
intValue方法可以用來(lái)取得Integer對(duì)象所存放的int數(shù)值,也可以通過(guò)類(lèi)似的方法來(lái)轉(zhuǎn)換其他的基本數(shù)據(jù)類(lèi)型,boolean,char除外。byte,short,long,float,double分別對(duì)應(yīng)方法byteValue,shortValue,longValue,floatValue,doubleValue。
舉例:String->int
Integer s = new Integer(str);
int s1=s.intValue();
int s1=Integer.parseInt(str);
2)和parseInt相反的是"toString"這個(gè)方法,這個(gè)方法是對(duì)象級(jí)別的,即將對(duì)象轉(zhuǎn)換成字符串。當(dāng)使"+"運(yùn)算符將對(duì)象同一字符串連接,Java編譯器會(huì)自動(dòng)調(diào)用"toString"方法。
舉例:int->String
Integer.toString(10);//返回10
另外一個(gè)類(lèi)似方法,object.valueOf( ) 方法,它返回的是Integer對(duì)象。
舉例:int->String
int a = 12345;
String b = String.valueOf(a);//返回12345
三、類(lèi)與類(lèi)之間的類(lèi)型轉(zhuǎn)換
類(lèi)與類(lèi)之間的轉(zhuǎn)換只能用在父子類(lèi)上,不能用在兄弟類(lèi),更不能用在根本不相關(guān)的兩個(gè)類(lèi)之間。子類(lèi)轉(zhuǎn)換成父類(lèi)屬于自動(dòng)類(lèi)型轉(zhuǎn)換,父類(lèi)轉(zhuǎn)換成子類(lèi)屬?gòu)?qiáng)制類(lèi)型轉(zhuǎn)換。 再補(bǔ)充一個(gè)例子:
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);// 兩個(gè)int型參數(shù)
11 }
12 }
程序輸出:
a + b = 30.0
這里說(shuō)明在方法調(diào)用時(shí)發(fā)生自動(dòng)類(lèi)型轉(zhuǎn)換。A中定義sum(double,double),我在B中調(diào)用sum(int,int)方法,但A中不存在此方法。所以Java 將int型擴(kuò)大到double型,然后調(diào)用sum(double,double) 。當(dāng)然,如果A中定義了sum(int,int) ,當(dāng)然會(huì)調(diào)用sum(int,int),而不會(huì)調(diào)用sum(double,double) 。