这对所有人来说可能都是一个简单的问题,但它却让我的头脑变得困惑,“为什么会这样?”
正如您在下面的代码中看到的,我声明了一个 float
变量并为其分配了一个值。当这段代码被编译和解释时,我会得到一个错误,因为可能会丢失精度
,这是正确的,因为java解释器的 float 常量的默认数据类型是double。
查询1:我想知道,当我的 float 常量可以容纳 float 提供的字节数时,为什么我要在应用程序中浪费内存来使用 double 。
查询 2: 现在,如果我指定 float a = 3.1415f ;
我将获得输出,但现在为我的 a 分配了多少内存
变量。
float a = 3.1415 ;
System.out.println("Value of a:"+a);
我真的很想了解这个黑客,为什么会这样?
最佳答案
Query 1 : I wonder, why should I waste memory in my application for double when my floating constant can accommodate in number of bytes float provide.
这只是浮点文字默认为double
的问题。来自 section 3.10.2 of the JLS :
A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d (§4.2.3).
您需要决定所需的类型,并编写适当的文字。几乎可以肯定,您不应该根据指定的位数来选择数据类型 - 并且要注意,仅仅因为 float
可以保持一定数量的小数位精度并不意味着它可以准确地表示具有那么多有效数字的数字。例如,没有任何二进制浮点类型可以精确表示 0.1,就像您不能将“三分之一”写为有限十进制数一样。
作为旁注,我个人喜欢为 double
显式添加 d
,只是为了清楚起见。
下一个:
Query 2: Now if I specify float a = 3.1415f ; I will get the output but now how much memory is allocated for my a variable.
4 个字节,因为它是一个 float
。
关于java - Java解释器浮点常量的默认数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381530/