Java自動裝箱後的值比較

Integer類在自動裝箱後,用==來做比較時,並不總是像其他類一樣比較對象地址,數值較小時,它比較的是對象值。

  當數值超過某個臨界點時,它纔會比較地址。這個臨界點是127和-128。

  假設有如下代碼:

  Java代碼

  Integer i1 = 127;

  Integer i2 = 127;

  if (i1 == i2)

  System.out.println("i1 == i2");

  else

  System.out.println("i1 != i2");

  那麼輸出結果是i1 == i2,比較的是對象值。

  如果:

  Java代碼

  Integer i1 = 128;

  Integer i2 = 128;

  if (i1 == i2)

  System.out.println("i1 == i2");

  else

  System.out.println("i1 != i2");

  則會輸出i1 != i2,比較的是對象地址。

  設計者的思路大概是,用==來進行比較,大概一般都是要比較值,但這種寫法是不對的,這樣吧,當對象值在一個字節以內時,比較值和比較地址的成 本是一樣的,那我就給你比較值,但如果值大於一個字節,比較值的成本就大過比較地址了,我就老老實實比較地址吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章