java float和double 区别

来源:互联网 发布:中国国家培训网 知乎 编辑:程序博客网 时间:2024/06/05 19:18

来自百度知道: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或者Ffloat 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)));}}


输出:


truetruetruefalse

最后等于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;    }


Integer
    public boolean equals(Object obj) {if (obj instanceof Integer) {    return value == ((Integer)obj).intValue();}return false;    }


Long
    public boolean equals(Object obj) {if (obj instanceof Long) {    return value == ((Long)obj).longValue();}return false;    }


Byte
    public boolean equals(Object obj) {if (obj instanceof Byte) {    return value == ((Byte)obj).byteValue();}return false;    }


Boolean
    public boolean equals(Object obj) {if (obj instanceof Boolean) {    return value == ((Boolean)obj).booleanValue();} return false;    }


0 0
原创粉丝点击