java面試一道令人懷疑人生的java面試題

2021-08-28 07:13:07 字數 1287 閱讀 4593

題目比較簡單,寫乙個swap方法,交換兩個integer的值。

private static void  swap(integer num1,integer num2)
當然,如果僅僅按照以上方結果是不能交換的值,因為num1與num2是區域性變數,方法結束後值還是沒有變,除非有相應的返回值來解決。
private static void  swap(integer num1,integer num2) catch (exception e) 

}

如上所示,但是結果還是不是我們預期的,結果如下

是什麼原因導致的呢?開啟integer的原始碼如下:

public static integer valueof(int i)
我們發現,interger取值時是首先判斷integercache,而integercache值的範圍是[-128]-[127],當我們 field.set(num1,num2)時,integercache中對應num1的位置是integercache[129],即integercache[129]的值被改為2,而執行到 field.set(num2,tmp)時,會對tmp進行裝箱操作,但是tmp的值同樣在[-128]-[127],即會去取integercache[129]的值,而此時integercache[129]的值為2,所以field.set(num2,tmp)後num2的值還是2.

要解決上面出現的問題目前有兩種方法:方法一 在使用tmp是重新new乙個新物件,即field.set(num2,new integer(tmp))。

方法二、直接將值作為乙個int型別,不進行拆裝箱操作即field.setint(num2,tmp);

Java多型一道面試題

下面 輸出是什麼 class a public string run a obj class b extends a public string run a obj class c extends b class d extends b public class test 關於上面所有注釋答案的解釋...

人生就是一道程式

using 情感 using 理智 using 道德 using 權利 using 財富 class 人生 private void 初始化 public void 享受童年 public void 成長 public void 求學 public voic 初戀 public void 工作 pu...

Java 每天來一道面試題

1 下面這段 的輸出結果是什麼?string a helloworld string b hello world system.out.println a b 輸出結果為 true。原因是string對字串的直接相加,會在編譯期進行優化。即hello world在編譯時期,被優化為helloworl...