請(qǐng)教java小問(wèn)題?
網(wǎng)友解答: 值為-2一、先掌握一些理論知識(shí)1. int 的取值區(qū)間:最大值為 2147483647,最小值為 -2147483648。2. int 溢出特性:正數(shù)過(guò)大溢出為負(fù)數(shù),負(fù)數(shù)過(guò)小
值為-2
一、先掌握一些理論知識(shí)1. int 的取值區(qū)間:
最大值為 2147483647,最小值為 -2147483648。
2. int 溢出特性:
正數(shù)過(guò)大溢出為負(fù)數(shù),負(fù)數(shù)過(guò)小溢出為正數(shù),
即,最大值 2147483647 再增 1 得到 -2147483648,
同理,最小值 -2147483648 再減 1 得到 2147483647
3. 整數(shù)直接量默認(rèn)為 int 型:
如:1、2、99、56 ... ,整數(shù)直接量默認(rèn)都是 int 類(lèi)型
4. 不同數(shù)據(jù)類(lèi)型之間做數(shù)學(xué)運(yùn)算:
當(dāng)不同數(shù)據(jù)類(lèi)型的變量之間進(jìn)行數(shù)學(xué)運(yùn)算,最終結(jié)果取最大的那個(gè)數(shù)據(jù)類(lèi)型,
如:double 與 long 類(lèi)型的變量做數(shù)學(xué)運(yùn)算時(shí),結(jié)果為 double 類(lèi)型。
二、再來(lái)分析這道題1. int i = Integer.MIN_VALUE;
//聲明一個(gè)整型變量i,并賦值為int最小值,即 i 中存 -2147483648;
2. i - 1
// i 為 int 型,1為整數(shù)直接量也是 int 型,結(jié)果仍為int,溢出為 2147483647;
3. i - 1L
// i 為 int 型,1L 為 long 型,運(yùn)算后結(jié)果為 long,不溢出,為 -2147483649;
4. (i - 1) + (i - 1L)
// 即,2147483647 + ( -2147483649 ),故結(jié)果為 -2
我是蘇max瘋,想了解更多java培訓(xùn)、學(xué)習(xí)相關(guān)內(nèi)容,記得點(diǎn)擊關(guān)注我哦~ 網(wǎng)友解答:這個(gè)問(wèn)題看似簡(jiǎn)單,但如果不實(shí)際測(cè)試可能還真會(huì)搞錯(cuò),最好的辦法是寫(xiě)個(gè)Demo將各個(gè)值輸出,就能揣摩出其中的意思,咱們結(jié)合程序及輸出來(lái)分析下:
在Java中整形是有數(shù)據(jù)范圍的,其中最小值:Integer.MIN_VALUE是-2147483648。如果在此基礎(chǔ)上再減1,就會(huì)出現(xiàn)溢出現(xiàn)象,從輸出結(jié)果看已經(jīng)變成:2147483647。而(i-1L)返回是long長(zhǎng)整形,再減去1,不會(huì)發(fā)生溢出正常計(jì)算,結(jié)果是:-2147483649。
(i-1):2147483647
(i-1L):-2147483649
所以,(i-1) + (i-1L)結(jié)果就是:-2。