Java筆試題庫(10期)

Java筆試題庫(10期)

前言:

最近一直沒有整理筆試題,也是工作太忙,筆試題整理稍複雜,總擔心因為自己的疏忽或者技術不精而誤人子弟,昨天群裡小夥伴問了一個很有意思的問題,這裡拿出來給大家看看。

以下兩個片段執行結果差異的原因是什麼?

片段一:

short s=1;s=s+1;

片段二:

short s=1;s+=1;

可以自己組織一下答案,最後看結論

結論分析:

片段一自然是編譯不通過的 ,提示損失精度 。

那麼片段二為什麼能編譯通過呢?

隱式類型轉換可以從小到大自動轉,即byte->short->int->long,如果反過來會丟失精度,必須進行顯示類型轉換。

回到這一題來看,s+=1的意思與s = s+1不同,s=s+1這句先執行s+1然後把結果賦給s,由於1為int類型,所以s+1的返回值是int,編譯器自動進行了隱式類型轉換,所以將一個int類型賦給short就會出錯。

而s+=1不同,由於他是使用+=操作符,在解析的時候s+=1就等價於s = (short)(s+1),也就是s+=1 <=> s = (s的類型)(s+1)。

(最後結論引自百度知道,略有刪改。

解答出處:https://zhidao.baidu.com/question/250880637.html)

擴展:

基本類型數據及所佔字節

數據類型所佔字節
boolean未定
byte1字節
char2字節
short2字節
int4字節
long8字節
float4字節
double8字節

隱式轉換與顯示轉換概念

隱式類型轉換

隱式轉換也叫作自動類型轉換, 由系統自動完成.

從存儲範圍小的類型到存儲範圍大的類型.

byte ->short(char)->int->long->float->double

顯示類型轉換

顯示類型轉換也叫作強制類型轉換, 是從存儲範圍大的類型到存儲範圍小的類型.

當我們需要將數值範圍較大的數值類型賦給數值範圍較小的數值類型變量時,由於此時可能會丟失精度,因此,需要人為進行轉換。我們稱之為強制類型轉換。

double→float→long→int→short(char)→byte

基本數據類型之間的轉換規則

1.在一個雙操作數以及位運算等算術運算式中,會根據操作數的類型將低級的數據類型自動轉換為高級的數據類型,分為以下幾種情況:

1)只要兩個操作數中有一個是double類型的,另一個將會被轉換成double類型,並且結果也是double類型;

2)只要兩個操作數中有一個是float類型的,另一個將會被轉換成float類型,並且結果也是float類型;

3)只要兩個操作數中有一個是long類型的,另一個將會被轉換成long類型,並且結果也是long類型;

4)兩個操作數(包括byte、short、int、char)都將會被轉換成int類型,並且結果也是int類型。

2. 如果低級類型為char型,向高級類型(整型)轉換時,會轉換為對應ASCII碼值,再做其它類型的自動轉換。

3. 對於byte,short,char三種類型而言,他們是平級的,因此不能相互自動轉換,可以使用下述的強制類型轉換。 如:

short i=99 ;char c=(char)i;System.out.println("output:"+c);

4. 不能在布爾值和任何數字類型間強制類型轉換;

5. 不同級別數據類型間的強制轉換,可能會導致溢出或精度的下降。

6. 當字節類型變量參與運算,java作自動數據運算類型的提升,將其轉換為int類型。

例如:

byte b;b=3;b=(byte)(b*3);//必須聲明byte。

相關推薦

推薦中...