java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
Java中的比較 ==,equals
① 對于==,如果是作用于基本數據類型的變量,則直接比較其存儲的"值"是否相等;如果是作用于引用類型的變量,則比較的是所指向的對象的地址。
② 對于equals方法,注意:equals方法不能作用于基本數據類型的變量;
如果沒有對equals方法進行重寫,則比較的是引用類型變量所指向的對象的地址;諸如String,Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容。
③ Float類型值的比較:
一般情況下,浮點數是不直接進行判等比較的,因為浮點數存在精度問題。要比較兩個浮點數,一般的比較方法是設定一個精度,當二者的差小于某個精度時,認為二者相等。例如:s,t為float類型。
1 if (Math.abs(s - t) < 0.001) {2 System.out.println("equal");3 }else{4 System.out.println("not equal");5 }
④ Float類和Double類都重寫了對應的equals方法,在比較之前都會判斷是否同屬于Float對象或Double對象,如果不是直接返回false,如果是再繼續比較對應的數值大小。
JDK1.8的源碼如下:
1.Float類重寫了equals方法:
1 public booleanequals(Object obj) {2 return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) ==floatToIntBits(value));3 }
2.Double類重寫了equals方法:
1 public booleanequals(Object obj) {2 return (obj instanceof Double)&& (doubleToLongBits(((Double)obj).value) ==doubleToLongBits(value));3 }
--------------------------------------------------------------------------------------------------------使用實例------------------------------------------------------------------------------------------------------------------------
①
1 public classTest{2 public String name="abc";3 public static voidmain(String[] args){4 Test test=newTest();5 Test testB=newTest();6 System.out.println(test.equals(testB)+","+test.name.equals(testB.name)); //注意test.equals(testB)是兩個對象之間的比較;test.name.equals(testB.name)是String類型的比較
7 }8 }
【解析】對于對象的比較,使用Object類的比較器如下所示:
1 public booleanequals(Object obj) {2 return (this ==obj);3 }
沒有重寫equals時,是直接用==判斷的。而String中重寫了equals方法。
總結
以上是生活随笔為你收集整理的java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树状数组 java_算法模板之树状数组
- 下一篇: opencv java match_Op