究竟什么是双重意味着在java?

我是Java的新手,只想确认Double是什么? 它与Float或Int类似吗? 任何帮助,将不胜感激。 我有时也看到大写的Double和其他时候的小写double 。 如果有人能澄清这意味着什么是伟大的!

Double是一个包装类,

Double类在对象中包装基本类型double的值。 Double类型的对象包含单个字段,其类型为double。

此外,这个类提供了几种方法,用于将double转换为String,将String转换为double,以及处理double时有用的其他常量和方法。

双数据类型 ,

双数据类型是双精度64位IEEE 754浮点。 其值范围为4.94065645841246544e-324d至1.79769313486231570e + 308d(正或负)。 对于十进制值,此数据类型通常是默认选择。 如上所述,此数据类型不应用于精确值,例如货币。

检查每个数据类型及其范围: Java的原始数据类型 。


重要说明:如果您考虑使用double来获取精确值,则需要在使用它之前重新思考。 Java陷阱:加倍

在评论@ paxdiablo的回答时,你问:

“所以基本上,使用Double而不是Float更好吗?”

这是一个复杂的问题。 我将分两部分处理


决定doublefloat之间

一方面, double占用8个字节而float占4个字节。 如果你有很多,这可能是重要的,虽然它也可能没有影响。 (考虑值是在64位机器上的字段或局部变量中的情况,并且JVM在64位边界上对齐它们。)此外,具有double值的浮点算法通常比使用float值慢…但是再一次这取决于硬件。

另一方面, double可以表示比float更大(和更小)的数字,并且可以用超过精度的两倍来表示它们。 有关详细信息,请参阅Wikipedia 。

棘手的问题是知道你是否真的需要 double的额外范围和精度。 在某些情况下,很明显你需要它。 在其他情况下,它并不那么明显。 例如,如果您正在进行反转矩阵或计算标准偏差等计算,则额外的精度可能很关键。 另一方面,在某些情况下,甚至double都不会给你足够的精确度。 (并注意期望floatdouble的陷阱给你一个确切的表示。他们不会,他们不能!)

在实际数值计算中有一个称为数值分析的数学分支,它处理舍入误差等的影响。 它曾经是计算机科学课程的标准部分……早在1970年代。


DoubleFloat之间做出决定

对于Double vs. Float情况,精度和范围问题与doublefloat相同,但相对性能指标略有不同。

  • Double (在32位机器上)通常需要16个字节+ 4个字节作为参考,而Float为12 + 4个字节。 将此值与8个字节进行比较,而对于doublefloat情况,则为4个字节。 所以这个比例是5到4而不是2比1。

  • 涉及DoubleFloat算法通常涉及取消引用指针并创建一个新对象来保存结果(取决于具体情况)。 这些额外的开销也会影响Double壳的比例。


正确性

说了这么多, 最重要的是正确性 ,这通常意味着获得最准确的答案。 即使准确性并不重要,“过于准确”通常也没有错。 因此,简单的“经验法则”是优先使用doublefloat ,除非有一个最重要的性能要求,并且你有确凿的证据表明使用float会对该要求产生影响。

double是IEEE754双精度浮点数,类似于float,但具有更大的范围和精度。

IEEE754单精度数具有32位(1个符号,8个指数和23个尾数位),而双精度数具有64位(1个符号,11个指数和52个尾数位)。

Java中的Double是double基本类型的类版本 – 你可以使用双精度但是,如果你想对它们做一些需要它们成为对象的东西(比如把它们放在一个集合中),你需要将它们装入Double对象中。