前言
首先简单提一下== 和equals :
==
的作用:
基本类型:比较值是否相等
引用类型:比较内存地址值是否相等
equals 的作用:
引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。
问题
这里就有一个容易让人产生误解的地方了.
java基本类型:byte,short,char,int,long,float,double,boolean
这其中包含了 float , 和double , 两个浮点类型的,这两种类型是不能用 == 来判断是否相等的, 其中有一个精度的问题.
如下:
Double a = 1.234567d;
Double b = 1.234567d;
if(a==b){
System.out.println("==");
}
运行会发现a 和 b 是不相等的.
解决
浮点型的不能用 == 判断如何解决呢?
两个浮点数比较可以通过相减并与预先设定的精度比较,记得要取绝对值
示例:
Double a = 1.234567d;
Double b = 1.234569d;
double precision = 0.000001d;
if(Math.abs(a-b)<precision){
System.out.println("==");
}else{
System.out.println("不等");
}
如上精度设置为:0.000001
如果判断误差在这个精度内,就认为相等.