来自百度知道:http://zhidao.baidu.com/link?url=O5UvP3PxCibnuhf6ovHleQsxTX-3ErdHuzXCkoxUvL_EomeF1y3nMTjb3ilpgUUiuj7c6aBRibzDv9UNnvZmVa
对编程人员来说,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)); }
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; }