Java數(shù)據(jù)類型的轉(zhuǎn)換:隱式(自動)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換

一、數(shù)據(jù)類型的分類

Java中數(shù)據(jù)類型分為基本數(shù)據(jù)類型及引用數(shù)據(jù)類型循头。Java數(shù)據(jù)類型的轉(zhuǎn)換一般分三種绵估,分別是:

  1. 簡單數(shù)據(jù)類型之間的轉(zhuǎn)換;
  2. 字符串與其它數(shù)據(jù)類型的轉(zhuǎn)換卡骂;
  3. 其它實用數(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"暴浦。

  1. 字符型轉(zhuǎn)時間型:2005-10-1
String str = "2005-10-01";
str = str + " "+"00:00:00.0";
Date date = java.sql.Timestamp.valueOf(str);
  1. 時間型轉(zhuǎn)字符型:
date =  reportdate.toString();
  1. 將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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末增淹,一起剝皮案震驚了整個濱河市虑润,隨后出現(xiàn)的幾起案子冗澈,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适揉,死亡現(xiàn)場離奇詭異,居然都是意外死亡洛退,警方通過查閱死者的電腦和手機(jī)瓣俯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兵怯,“玉大人降铸,你說我怎么就攤上這事∫×悖” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵桶蝎,是天一觀的道長驻仅。 經(jīng)常有香客問我,道長登渣,這世上最難降的妖魔是什么噪服? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮胜茧,結(jié)果婚禮上粘优,老公的妹妹穿的比我還像新娘仇味。我一直安慰自己,他們只是感情好雹顺,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布丹墨。 她就那樣靜靜地躺著,像睡著了一般嬉愧。 火紅的嫁衣襯著肌膚如雪贩挣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天没酣,我揣著相機(jī)與錄音王财,去河邊找鬼。 笑死裕便,一個胖子當(dāng)著我的面吹牛绒净,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偿衰,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼挂疆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哎垦?” 一聲冷哼從身側(cè)響起囱嫩,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漏设,沒想到半個月后墨闲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡郑口,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年鸳碧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬性。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞻离,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乒裆,到底是詐尸還是另有隱情套利,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布鹤耍,位于F島的核電站肉迫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稿黄。R本人自食惡果不足惜喊衫,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杆怕。 院中可真熱鬧族购,春花似錦壳贪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朝墩,卻和暖如春醉拓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背收苏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工亿卤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹿霸。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓排吴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懦鼠。 傳聞我的和親對象是個殘疾皇子钻哩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容