Integer比較大小失真分析

2021-10-25 21:36:42 字數 986 閱讀 2706

1,盡量不要用new的形式來獲得integer物件。

2,integer物件比較大小時,不要用==,盡量使用equals方法。

原始碼展示

public

static

void

main

(string[

] args)

// integer內方法

public

static integer valueof

(int i)

// 內部類integercache 該cache中範圍[-128,127]

private

static

class

integercache

catch

( numberformatexception nfe)

} high = h;

cache =

newinteger

[(high - low)+1

];int j = low;

for(

int k =

0; k < cache.length; k++

) cache[k]

=new

integer

(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >=

127;

}private

integercache()

}

說明
#1.由於==比較的是位址,因此不在[-128,127]範圍內,或者是用new關鍵字建立的integer物件,都是新物件,於是比較位址的結果為false

#2.而equal則是根據物件值做比較,就是那個你重寫或者沒重寫的那個equals方法裡面做的比較

兩個Integer型別比較大小

基本型別和string比較資料比較實用的是使用工具模擬較靠譜 objectutils.equals object,object 使用apache.common的objectutils是有乙個坑 obejctutils.equals 引數1,引數2 切記引數1和引數2是同一型別,乙個integer乙個...

踩坑 Integer型別的整數比較大小

先劃重點 integer型別的整數比較數值大小用equals.和intvalue 盡量別用 去比較是否相等 之前沒注意過integer型別比較數值大小,一直在用 某天,寫的一段程式沒跑通,才注意到這個問題 public static void main string args 結果 true tru...

double比較大小

參考 comparing floating point numbers 總結幾點 0.float佔4byte,精度是6 7位 double佔8byte,精度是15 16位。1.因為double型別或float型別都是有精度的,其實都是取的近似值,所以有個誤差。和乙個很小的數比如0.00000001 ...