問:如下程序語句有什么問題嗎丸升?
short s1 = 1;
s1 = s1 + 1; //1
short s2 = 1;
s2 += 1; //2
答:對(duì)于注釋 1 來說勉盅,在 s1+1
運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類型為 int佑颇,所以將 int 賦予給 short 類型的變量 s1 會(huì)出現(xiàn)類型轉(zhuǎn)換錯(cuò)誤(無法編譯,IDE 提示錯(cuò)誤)草娜,除非主動(dòng)加上強(qiáng)轉(zhuǎn)挑胸。對(duì)于注釋 2 來說 +=
是 java 語法規(guī)定的運(yùn)算符,所以 java 編譯器會(huì)對(duì)它進(jìn)行轉(zhuǎn)換特殊處理宰闰,故可以正確編譯執(zhí)行茬贵。
問:java 中 char 類型變量能不能儲(chǔ)存一個(gè)中文的漢字凸克,為什么?
答:java 的 char 類型變量是用來儲(chǔ)存 Unicode 編碼字符的闷沥,Unicode 字符集包含了漢字萎战,所以 char 類型自然就能存儲(chǔ)漢字,但是在某些特殊情況下某個(gè)生僻漢字可能沒有包含在 Unicode 編碼字符集中舆逃,這種情況下 char 類型就不能存儲(chǔ)該生僻漢字了蚂维。
問:java 的 Integer 和 int 有什么區(qū)別?
答:int 是 java 內(nèi)置基本數(shù)據(jù)類型之一路狮,java 為每個(gè)基本類型都提供了一個(gè)封裝類虫啥,Integer 就是 int 的封裝類(也叫包裝類型);int 變量的默認(rèn)值為 0奄妨,Integer 變量的默認(rèn)值為 null涂籽,所以 Integer 可以區(qū)分出未賦值和值為 0 的區(qū)別;Integer 類內(nèi)部提供了一些關(guān)于整數(shù)操作的方法砸抛,例如表示整數(shù)的最大值和最小值评雌。
問:java 的 switch 語句能否作用在 byte 類型變量上,能否作用在 long 類型變量上直焙,能否作用在 String 類型變量上景东?
答:由于 byte 的存儲(chǔ)范圍小于 int,可以向 int 類型進(jìn)行隱式轉(zhuǎn)換奔誓,所以 switch 可以作用在 byte 類型變量上斤吐;由于 long 的存儲(chǔ)范圍大于 int,不能向 int 進(jìn)行隱式轉(zhuǎn)換厨喂,只能強(qiáng)制轉(zhuǎn)換和措,所以 switch 不可以作用在 long 類型變量上;對(duì)于 String 類型變量在 Java 1.7 版本之前不可以蜕煌,1.7 版本之后是可以的派阱。
問:能否在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量?
答:不行幌绍,我們不能在沒有強(qiáng)制類型轉(zhuǎn)換的前提下將一個(gè) double 值賦值給 long 類型的變量颁褂,因?yàn)?double 類型的范圍比 long 類型更廣,所以必須要進(jìn)行強(qiáng)制轉(zhuǎn)換傀广。
問:java 中 3*0.1 == 0.3 將會(huì)返回什么?true 還是 false彩届?
答:false伪冰,因?yàn)楦↑c(diǎn)數(shù)不能完全精確的表示出來,一般都會(huì)損失精度樟蠕。
問:java 中 float f = 3.4; 是否正確贮聂?
答:不正確靠柑,3.4 是雙精度數(shù),將雙精度型(double)賦值給浮點(diǎn)型(float)屬于向下轉(zhuǎn)型(down-casting吓懈,也稱為窄化)會(huì)造成精度損失歼冰,因此需要強(qiáng)制類型轉(zhuǎn)換 float f = (float)3.4;
或者寫成 float f = 3.4F;
才可以。