java s1_转!!Java 基础面试题的剖析: short s1=1;s1 = s1 +1 报错? s1+=1 呢
package?common;
public?class?ShortTypeTest?{
/*
*?@param?args
*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
short?s1?=?1;?s1?=?(short)?(s1?+?1);//簡單類型
short?s2=1;?s2?+=1;//復(fù)合類型,復(fù)合賦值操作符+=,
System.out.println(s1+";"+s2);
//運(yùn)行時Console輸出什么,你知道嗎?
}
}
題目:
short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?
解答:
Java規(guī)范有這樣的規(guī)則
[
1.高位轉(zhuǎn)低位需要強(qiáng)制轉(zhuǎn)換
2.低位轉(zhuǎn)高位自動轉(zhuǎn).
]
short s1 = 1; s1 = s1 + 1;有什么錯?
答: i 是int 型?? s1 short型 通過 + 運(yùn)算后s1 自動轉(zhuǎn)為int 型?? 所以錯!
short s1 = 1; s1 += 1;有什么錯?
答: 如果你認(rèn)為表達(dá)式(x += i)只是表達(dá)式(x = x + i)的簡寫方式,這并不準(zhǔn)確。
這兩個表達(dá)式都被稱為賦值表達(dá)式。(x = x + i)表達(dá)式使用的是簡單賦值操作符(=),而(x += i)表達(dá)式使用的是復(fù)合賦值操作符。Java語言規(guī)范中講到,復(fù)合賦值(E1 op=E2)等價于簡單賦值(E1=(T)((E1) op (E2))),其中T是E1的類型,除非E1只被計算一次。?? 換句話說,復(fù)合賦值表達(dá)式自動地將所執(zhí)行計算的結(jié)果轉(zhuǎn)型為其左側(cè)變量的類型。如果結(jié)果的類型與該變量的類型相同,那么這個轉(zhuǎn)型不會造成任何影響。然而,如果結(jié)果的類型比該變量的類型要寬,那么復(fù)合賦值操作符將悄悄地執(zhí)行一個窄化原生類型轉(zhuǎn)換。
因此,復(fù)合賦值表達(dá)式可能是危險的。為了避免這種令人不快的突襲,請不要將復(fù)合賦值操作符作用于byte、short或char類型的變量。 因為S1是short型的,占2個字節(jié),而1是int型的,占4個字節(jié)。在兩個類型的值相加的時候,會發(fā)生自動類型的提升,要不然數(shù)據(jù)也裝不下呀,是這個道理吧*_*。也就是說s1+1后,其結(jié)果是int型的,而不是short型的,所以可以想想看,把4個字節(jié)的東西放在兩個字節(jié)的空間里,肯定編譯不通過。
后面的那個不會發(fā)生類型的提升,JAVA規(guī)范上說?【e1+=e2??? 實際上是??? e1=(T1)(e1+e2)?】,其中T1是e1的數(shù)據(jù)類型。?? s1+=1等效于?? s1=(short)(s1+1),所以是正確的
原博文地址:http://blog.csdn.net/hurryjiang/article/details/9256959
總結(jié)
以上是生活随笔為你收集整理的java s1_转!!Java 基础面试题的剖析: short s1=1;s1 = s1 +1 报错? s1+=1 呢的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中np没有定义_python
- 下一篇: java美元兑换,(Java实现) 美元