一、數(shù)據(jù)類型的分類
Java中數(shù)據(jù)類型分為基本數(shù)據(jù)類型及引用數(shù)據(jù)類型循头。Java數(shù)據(jù)類型的轉(zhuǎn)換一般分三種绵估,分別是:
- 簡單數(shù)據(jù)類型之間的轉(zhuǎn)換;
- 字符串與其它數(shù)據(jù)類型的轉(zhuǎn)換卡骂;
- 其它實用數(shù)據(jù)類型轉(zhuǎn)換国裳。
二、簡單數(shù)據(jù)類型之間的轉(zhuǎn)換
在Java中整型全跨、實型(常量)缝左、字符型被視為簡單數(shù)據(jù)類型,這些類型由低級到高級分別為(byte,short渺杉,char)->int->long->float->double
簡單數(shù)據(jù)類型之間的轉(zhuǎn)換又可以分為:
- 低級到高級的自動類型轉(zhuǎn)換
- 高級到低級的強(qiáng)制類型轉(zhuǎn)換
- 包裝類過渡類型能夠轉(zhuǎn)換
1??自動類型轉(zhuǎn)換
低級變量可以直接轉(zhuǎn)換為高級變量蛇数,稱之為自動類型轉(zhuǎn)換。例如少办,下面的語句可以在Java中直接通過苞慢,但是將double型變量賦值給float變量,不加強(qiáng)轉(zhuǎn)的話會報錯:
byte b;
int i=b;
long l=b;
float f=b;
double d=b;
如果低級類型為char型英妓,向高級類型(整型)轉(zhuǎn)換時挽放,會轉(zhuǎn)換為對應(yīng)ASCII碼值,例如:
char c='c';
int i=c;
System.out.println("output:" i);//output:99
對于byte蔓纠、short辑畦、char三種類型而言,它們是平級的腿倚,因此不能相互自動轉(zhuǎn)換纯出,可以使用下述的強(qiáng)制類型轉(zhuǎn)換。
short i=99;
char c=(char)i;
System.out.println("output:" c);//output:c;
注意:byte敷燎、short暂筝、int三種類型都是整型,因此如果操作整型數(shù)據(jù)時硬贯,最好統(tǒng)一使用int型焕襟。
2??強(qiáng)制類型轉(zhuǎn)換
將高級變量轉(zhuǎn)換為低級變量時,情況會復(fù)雜一些饭豹,可以使用強(qiáng)制類型轉(zhuǎn)換鸵赖。即必須采用下面這種語句格式:
int i=99;
byte b=(byte)i;
char c=(char)i;
可以想象,這種轉(zhuǎn)換肯定可能會導(dǎo)致溢出或精度的下降拄衰。
3??包裝類過渡類型轉(zhuǎn)換
所謂包裝類它褪,就是可以直接將簡單類型的變量表示為一個類,在執(zhí)行變量類型的相互轉(zhuǎn)換時翘悉,會大量使用這些包裝類茫打。Java共有六個包裝類,分別是Boolean妖混、Character源葫、Integer砖瞧、Long、Float和Double床未,從字面上就可以看出它們分別對應(yīng)于 boolean振坚、char渡八、int、long宏娄、float和double逮壁。而String和Date本身就是類窥淆。所以也就不存在什么包裝類的概念了。在進(jìn)行簡單數(shù)據(jù)類型之間的轉(zhuǎn)換(自動轉(zhuǎn)換或強(qiáng)制轉(zhuǎn)換)時扛伍,總是可以利用包裝類進(jìn)行中間過渡蜒秤。一般情況下亚斋,首先聲明一個變量,然后生成一個對應(yīng)的包裝類纸泡,就可以利用包裝類的各種方法進(jìn)行類型轉(zhuǎn)換了女揭。例如:
例1栏饮,當(dāng)希望把float型轉(zhuǎn)換為double型時:
class convert {
public static void main(String[] args) {
float f=100.00f;
System.out.println(f);//100.0
Float F=new Float(f);
System.out.println(F);//100.0
Double D=F.doubleValue();
System.out.println(D);//100.0
}
}
當(dāng)希望把double型轉(zhuǎn)換為int型時:
class convert {
public static void main(String[] args) {
double d=100.00;
System.out.println(d);//100.00
Double D=new Double(d);
System.out.println(D);//100.00
int i=D.intValue();
System.out.println(i);//100
}
}
當(dāng)希望把int型轉(zhuǎn)換為double型時灶平,自動轉(zhuǎn)換:
class convert {
public static void main(String[] args) {
int i=200;
System.out.println(i);//200
double d=i;
System.out.println(d);//200.0
}
}
簡單類型的變量轉(zhuǎn)換為相應(yīng)的包裝類逢享,可以利用包裝類的構(gòu)造函數(shù)瞒爬。即:
Boolean(boolean value)、Character(char value)弦叶、Integer(int value)、Long(long value)燕侠、Float(float value)绢彤、Double(double value)
而在各個包裝類中蜓耻,總有形為××Value()的方法,來得到其對應(yīng)的簡單類型數(shù)據(jù)饶氏。利用這種方法疹启,也可以實現(xiàn)不同數(shù)值型變量間的轉(zhuǎn)換蔼卡。例如,對于一個雙精度實型類荤懂,intValue()可以得到其對應(yīng)的整型變量节仿,而doubleValue()可以得到其對應(yīng)的雙精度實型變量掉蔬。
三、字符串型與其它數(shù)據(jù)類型的轉(zhuǎn)換
通過查閱類庫中各個類提供的成員方法可以看到挤忙,幾乎從java.lang.Object類派生的所有類提供了toString()方法册烈,即將該類轉(zhuǎn)換為字符串婿禽。例如:Characrer扭倾、Integer膛壹、Float、Double肩民、Boolean链方,Short等類的toString()方法祟蚀。toString()方法用于將字符前酿、整數(shù)、浮點數(shù)纵苛、雙精度數(shù)攻人、邏輯數(shù)怀吻、短整型等類轉(zhuǎn)換為字符串初婆。如下所示:
class convert {
public static void main(String[] args) {
int i=10;
float f=3.14f;
double d=3.1415926;
//生成Integer類
Integer I=new Integer(i);
System.out.println(I);
//生成Float類
Float F=new Float(f);
System.out.println(F);
//生成Double類
Double D=new Double(d);
System.out.println(D);
//分別調(diào)用包裝類的toString()方法轉(zhuǎn)換為字符串
String si=I.toString();
String sf=F.toString();
String sd=D.toString();
System.out.println("si:" + si);
System.out.println("sf:" + sf);
System.out.println("sd:" + sd);
}
}
四、將字符型直接做為數(shù)值轉(zhuǎn)換為其它數(shù)據(jù)類型
將字符型變量轉(zhuǎn)換為數(shù)值型變量實際上有兩種對應(yīng)關(guān)系萨赁,在第一部分所說的那種轉(zhuǎn)換中兆龙,實際上是將其轉(zhuǎn)換成對應(yīng)的ASCII碼,但是有時還需要另一種轉(zhuǎn)換關(guān)系慰安。例如化焕,'1'就是指的數(shù)值1铃剔,而不是其ASCII碼,對于這種轉(zhuǎn)換元莫,可以使用Character的getNumericValue(char ch)方法蝶押。
五棋电、Date類與其它數(shù)據(jù)類型的相互轉(zhuǎn)換
整型和Date類之間并不存在直接的對應(yīng)關(guān)系赶盔,只是可以使用int型為分別表示年、月撕攒、日抖坪、時擦俐、分握侧、秒,這樣就在兩者之間建立了一個對應(yīng)關(guān)系备徐。在作這種轉(zhuǎn)換時饥悴,可以使用Date類構(gòu)造函數(shù)的三種形式:
- Date(int year, int month, int date):以int型表示年西设、月贷揽、日
- Date(int year, int month, int date, int hrs, int min):以int型表示年禽绪、月印屁、日雄人、時念赶、分
- Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年叉谜、月、日停局、時、分码倦、秒r
在長整型和Date類之間有一個很有趣的對應(yīng)關(guān)系叹洲,就是將一個時間表示為距離格林尼治標(biāo)準(zhǔn)時間1970年1月1日0時0分0秒的毫秒數(shù)运提。對于這種對應(yīng)關(guān)系民泵,Date類也有其相應(yīng)的構(gòu)造函數(shù):Date(long date)声离。
獲取Date類中的年赁濒、月、日、時熄攘、分、秒以及星期你可以使用Date類的getYear()滥比、getMonth()盗扇、getDate()、getHours()寥假、getMinutes()市框、getSeconds()、getDay()方法糕韧,你也可以將其理解為將Date類轉(zhuǎn)換成int枫振。
而Date類的getTime()方法可以得到我們前面所說的一個時間對應(yīng)的長整型數(shù)。與包裝類一樣,Date類也有一個toString()方法可以將其轉(zhuǎn)換為String類。
有時我們希望得到Date的特定格式窍侧,例如20020324议经,我們可以使用以下方法,首先在文件開始引入,
import java.text.SimpleDateFormat;
import java.util.Date;
class convert {
public static void main(String[] args) {
Date date = new Date();
//如果希望得到Y(jié)YYYMMDD的格式
SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMdd");
String dateFormat=sy1.format(date);
System.out.println(dateFormat);//20190504
//如果希望分開得到年梧却,月,日
SimpleDateFormat sy=new SimpleDateFormat("yyyy");
String year=sy.format(date);
System.out.println(year);//2019
SimpleDateFormat sm=new SimpleDateFormat("MM");
String month=sm.format(date);
System.out.println(month);//05
SimpleDateFormat sd=new SimpleDateFormat("dd");
String day=sd.format(date);
System.out.println(day);//04
}
}
附加:
在Java中除了這些轉(zhuǎn)換之外赊时,基本數(shù)據(jù)類型還可以被隱式的轉(zhuǎn)換成String。例如:
System.out.print("轉(zhuǎn)換:"+100);//如果在數(shù)據(jù)前面有字符串用+連接//就會隱式的轉(zhuǎn)換成String
特別注意鸭栖,null 與字符串 "XXXX" + 操作會變成 "nullXXXX"暴浦。
- 字符型轉(zhuǎn)時間型:2005-10-1
String str = "2005-10-01";
str = str + " "+"00:00:00.0";
Date date = java.sql.Timestamp.valueOf(str);
- 時間型轉(zhuǎn)字符型:
date = reportdate.toString();
- 將long型轉(zhuǎn)化為String型
long num= 99L;
String str = String.valueOf(num);
基本類型s都可以通過String.valeOf(s)來轉(zhuǎn)化為String型独撇。
附錄:各數(shù)據(jù)類型的取值范圍
1??整型
①byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字節(jié)忧设。Byte。末尾加B
②short:-2^15 ~ 2^15-1吏砂,即-32768 ~ 32767匈织。2字節(jié)碰逸。Short胳喷。末尾加S
③有符號int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字節(jié)。Integer。
④無符號int:0~2^32-1。
⑤long:-2^63 ~ 2^63-1酌心,即-9223372036854774808 ~ 9223372036854774807。8字節(jié)址貌。Long螟凭。末尾加L钟些。(也可以不加L)
2??浮點型
①float:4字節(jié)。Float。末尾加F辕棚。(也可以不加F)
②double:8字節(jié)。Double。
3??字符型
①char:2字節(jié)。Character疯潭。
4??布爾型
①boolean:Boolean。