java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响
Java中的比較 ==,equals
① 對于==,如果是作用于基本數(shù)據(jù)類型的變量,則直接比較其存儲(chǔ)的"值"是否相等;如果是作用于引用類型的變量,則比較的是所指向的對象的地址。
② 對于equals方法,注意:equals方法不能作用于基本數(shù)據(jù)類型的變量;
如果沒有對equals方法進(jìn)行重寫,則比較的是引用類型變量所指向的對象的地址;諸如String,Date等類對equals方法進(jìn)行了重寫的話,比較的是所指向的對象的內(nèi)容。
③ Float類型值的比較:
一般情況下,浮點(diǎn)數(shù)是不直接進(jìn)行判等比較的,因?yàn)楦↑c(diǎn)數(shù)存在精度問題。要比較兩個(gè)浮點(diǎn)數(shù),一般的比較方法是設(shè)定一個(gè)精度,當(dāng)二者的差小于某個(gè)精度時(shí),認(rèn)為二者相等。例如: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類都重寫了對應(yīng)的equals方法,在比較之前都會(huì)判斷是否同屬于Float對象或Double對象,如果不是直接返回false,如果是再繼續(xù)比較對應(yīng)的數(shù)值大小。
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 }
--------------------------------------------------------------------------------------------------------使用實(shí)例------------------------------------------------------------------------------------------------------------------------
①
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)是兩個(gè)對象之間的比較;test.name.equals(testB.name)是String類型的比較
7 }8 }
【解析】對于對象的比較,使用Object類的比較器如下所示:
1 public booleanequals(Object obj) {2 return (this ==obj);3 }
沒有重寫equals時(shí),是直接用==判斷的。而String中重寫了equals方法。
總結(jié)
以上是生活随笔為你收集整理的java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树状数组 java_算法模板之树状数组
- 下一篇: java 管理对象是什么_Java工程师