Java常見問題3 週期之謎

2021-09-07 01:44:15 字數 2530 閱讀 4092

byte是有符號的。範圍是-128 - 127。

而0x90是int型別。

比較的時候。不相等。

假設想讓其相等,須要進行型別轉換:(byte & 0xff) 或者 (byte)0x99。

自增運算子對迴圈的影響。j = j++,先賦值。

integer.max_value加一之後會變成integer.min_value。這對迴圈會有影響。
能夠考慮使用long來表示i變數,或者使用效率更高的i != integer.max_value。

(-1 << 32)的結果是-1而不是0。
對於int型的資料移位運算總是取右端數轉換成2進製的低五位。
對於long型的資料移位運算總是取右端數轉換成2進製的低六位。

32取低五位是0。因此結果是-1。

假設右邊的數是負數,相同保留低五(六)位,將其轉換為正數。

while(i == i + 1)
當浮點數i足夠大時候, i = i + 1。

相鄰浮點數之間的距離被稱為ulp(unit int the last place),一旦ulp超過2。加一將不會產生不論什麼影響。

二進位制浮點數算術僅僅是一種近似。

while(i != i)
ieee 754浮點算術保留了乙個特殊的值:nan(not a number)。
double i = 0.0 / 0.0。double i = double.nan,
不論什麼浮點數操作,僅僅要乙個或多個運算元為nan,那麼結果是nan。
nan不等於不論什麼浮點數,包含它自身。nan  != nan 。
while(i != i + 0)
i != i + 0,假設i是string型別。此時的+就不是算術加號了,被過載為字串的連線。

while(i != 0)
還是在講型別轉換。
當i為short型別的-1的時候,i >>>= 1,仍舊是-1:首先將short轉換為int。然後在擷取低位16。
short,byte的不論什麼負數終於都會轉換為-1。而char不會,char是無符號的。
integer i = new integer(0);

integer j = new integer(0);

while(i <= j && i >= j && i != j)

包裝類,當使用==運算子時候,並非推斷值相等,而是引用(相容性考慮)。

<=或者》= 都是值推斷。

while(i != 0 && i == -i)
整數的邊界問題
0x8000 0000 表示最小的負數(integer.min_value),對其求相反數,仍是其本身。
final int start = 2000000000;

int count = 0;

for (float f = start; f < start + 65; f++)

浮點數精度問題

start+50與start相等,當使用浮點數表示的時候。50比start的ulp距離(128)的一半還小。

當超過ulp的距離的一半的時候,無限迴圈。

取餘和乘除具有同樣的優一年級。

Java 面試常見問題

介面抽象類 區別成員變數 抽象類可以是變數也可以是常量,介面只能是常量 關鍵字 抽象類abstract 介面是inte ce 構造方法 介面沒有構造方法,抽象類有構造方法 成員方法 抽象類可以有非抽象方法,而介面不能有 介面可以多實現,而抽象類只能單繼承 介面可以同時繼承多個介面 相同點不能直接例項...

JAVA之常見問題

與equals 的區別 比較的是兩個物件的位址 equals 比較的是2個物件的內容 是比較兩個 基本型別 的值是否相等,equals 是比較兩個物件是否相等。switch語句中的變數型別只能是 byte short int char string。實現多型的三個條件 繼承 重寫 向上轉型。每個方法...

JAVA面試面試常見問題

面試官問你乙個問題,你要說出關鍵點,不要說出一大堆然後又沒有重點,那樣的話其實沒有任何意義,關於這個點的問題,我就舉幾個例子 第乙個是 struts 的工作流 注 首先說為什麼我要突出這幾個點呢,因為別人問你struts的工作流,你不用非要說到 級別的,但是你起碼要告訴別人,你是知道核心過濾器,也是...