表達(dá)式類型的陷阱

??Java語言規(guī)定:當(dāng)一個(gè)算術(shù)表達(dá)式中包含多個(gè)基本類型的值時(shí),整個(gè)算術(shù)表達(dá)式的數(shù)據(jù)類型將發(fā)生自動(dòng)提升。Java語言中的自動(dòng)提升規(guī)則如下:

  • 所有byte型疟游、short型和char型將被提升為int型

  • 這個(gè)算術(shù)表達(dá)式的數(shù)據(jù)類型自動(dòng)提升到與表達(dá)式中最高等級(jí)操作數(shù)同樣的類型。操作數(shù)的等級(jí)排列如下所示:


例子:

public class Main {
public static void main(String args[]) {
    //定義一個(gè)short類型的變量
    short s=4;
    //表達(dá)式中的s將自動(dòng)提升到int類型鸳兽,則右邊的表達(dá)式類型為int
    //將一個(gè)int類型賦給short類型的變量時(shí)將發(fā)生錯(cuò)誤
    s=s-2;
    byte b=2;
    char c='a';
    int i=23;
    double d=.324;
    //右邊表達(dá)式中在最高等級(jí)操作數(shù)為d(double型)
    //則右邊表達(dá)式的類型為double型,故賦給一個(gè)double型變量
    double result=b+c+i*d;
    System.out.println(result);
    int val=3;
    //右邊表達(dá)式中2個(gè)操作數(shù)都是int罕拂,故右邊表達(dá)式的類型為int
    //因此揍异,雖然23/3不能除盡,依然得到一個(gè)int整數(shù)
    int intResult=23/val;
    System.out.println(intResult);
    //程序自動(dòng)將7爆班、'a'等基本類型轉(zhuǎn)化為字符串蒿秦,輸出字符串Hello!a7
    System.out.println("Hello!"+'a'+7);
    //程序?qū)?a'當(dāng)成int處理,因此'a'+7得到104蛋济,輸出字符串104Hello!
    System.out.println('a'+7+"Hello!");
  }
}

??在復(fù)合賦值運(yùn)算符中有點(diǎn)不同,由前面的介紹可知炮叶,下面的語句會(huì)引起編譯錯(cuò)誤:

short s=4;
s=s-2;

因?yàn)閟-2表達(dá)式的類型將自動(dòng)提升為int類型碗旅,所以程序?qū)⒁粋€(gè)int類型的變量賦給s時(shí)導(dǎo)致了編譯錯(cuò)誤。但是下面形式就沒有任何問題:

short s=4;
s-=2;

上面的表達(dá)式使用了復(fù)合賦值運(yùn)算符镜悉,此時(shí)將不會(huì)產(chǎn)生編譯錯(cuò)誤祟辟。Java語言幾乎允許所有的雙目運(yùn)算符和=一起結(jié)合成復(fù)合賦值運(yùn)算符,如+=侣肄、-=旧困、*=、/=稼锅、%=吼具、<<=、>>=矩距、>>>=拗盒、&=、^=锥债、|=等陡蝇。根據(jù)Java語言規(guī)范,復(fù)合賦值運(yùn)算符包含了一個(gè)隱式的類型轉(zhuǎn)換哮肚,即:

a+=5;

等價(jià)于

a=(a的類型)(a+5);

也就是說登夫,復(fù)合賦值運(yùn)算符會(huì)自動(dòng)地將它計(jì)算的結(jié)果值強(qiáng)制類型轉(zhuǎn)換為其左側(cè)變量的類型,強(qiáng)制類型轉(zhuǎn)換將有可能導(dǎo)致高位"截?cái)?允趟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恼策,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拼窥,更是在濱河造成了極大的恐慌戏蔑,老刑警劉巖蹋凝,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異总棵,居然都是意外死亡鳍寂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門情龄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迄汛,“玉大人,你說我怎么就攤上這事骤视“鞍” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵专酗,是天一觀的道長(zhǎng)睹逃。 經(jīng)常有香客問我,道長(zhǎng)祷肯,這世上最難降的妖魔是什么沉填? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮佑笋,結(jié)果婚禮上翼闹,老公的妹妹穿的比我還像新娘。我一直安慰自己蒋纬,他們只是感情好猎荠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜀备,像睡著了一般关摇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琼掠,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天拒垃,我揣著相機(jī)與錄音,去河邊找鬼瓷蛙。 笑死悼瓮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艰猬。 我是一名探鬼主播横堡,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼冠桃!你這毒婦竟也來了命贴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胸蛛,沒想到半個(gè)月后污茵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葬项,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泞当,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片民珍。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡襟士,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嚷量,到底是詐尸還是另有隱情陋桂,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布蝶溶,位于F島的核電站嗜历,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抖所。R本人自食惡果不足惜秸脱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望部蛇。 院中可真熱鬧,春花似錦咐蝇、人聲如沸涯鲁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抹腿。三九已至,卻和暖如春旭寿,著一層夾襖步出監(jiān)牢的瞬間警绩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工盅称, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肩祥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓缩膝,卻偏偏與公主長(zhǎng)得像混狠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疾层,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 表達(dá)式 表達(dá)式是由數(shù)字将饺、運(yùn)算符、數(shù)字分組符號(hào)(如括號(hào))、自由變量和約束變量等以能求得數(shù)值的有意義排列方法所得的組合...
    劼哥stone閱讀 560評(píng)論 0 4
  • 前言 人生苦多予弧,快來 Kotlin 刮吧,快速學(xué)習(xí)Kotlin! 什么是Kotlin掖蛤? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評(píng)論 9 118
  • 關(guān)于字符串的陷阱 JVM對(duì)字符串的處理 首先看如下代碼: 上面創(chuàng)建了兩個(gè)字符串對(duì)象杀捻,其中一個(gè)是“HelloJack...
    Jack921閱讀 931評(píng)論 0 1
  • 37歲的我水醋,還是想做很多事情,不想每天這樣過彪置,來得及嗎拄踪? 1.我想陪著孩子長(zhǎng)大,給他們做好吃的拳魁,哪怕不太多惶桐,周末也...
    匆匆不離去閱讀 385評(píng)論 0 1
  • 引言:項(xiàng)目需求不同應(yīng)用之間的相互調(diào)用,類似分享到微信潘懊、QQ姚糊、新浪微博應(yīng)用之間的調(diào)用等,廢話不多說授舟,記錄一下救恨,心得體...
    ibabyblue閱讀 1,244評(píng)論 0 2