对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)
另外的区别:
public class FloatDouble {
public static void main(String[] args) {
float f = 1.0f;//有小数点的话,必须要加f或者F
float f2 = 1.0F;
float f3 = 1;
double d = 1.0;
double d2 = 1.0f;
double d3 = 1;
double d4 = 1.0d;
System.out.println(new Float(1.0).equals(new Float(1.0)));
System.out.println(new Double(1.0).equals(new Double(1.0)));
System.out.println(f == d);
System.out.println(new Float(f).equals(new Double(d)));
}
}
输出:
true
true
true
false
最后等于false,为什么呢?看代码。
对于Float:
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
对于Double:
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
所以,要类型相同,才有可能相等,而不仅仅是比较两个数字的值。
对于其他包装类型,也一样。
Short
public boolean equals(Object obj) {
if (obj instanceof Short) {
return value == ((Short)obj).shortValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Byte) {
return value == ((Byte)obj).byteValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}