Java 为什么我们不应该对双变量使用int值?(亚奥理事会考试)

Java 为什么我们不应该对双变量使用int值?(亚奥理事会考试),java,Java,我读了Mala Gupta的书“OCA Java SE 8”,有一个问题如下: 正如我所知,当我们用int值声明一个双变量时(例如选项“e”double a5=10),这段代码仍然可以编译,但为什么在这种情况下选项“e”是一个不正确的答案呢?这是一个不正确的答案,因为整数被转换为double,然后被存储 因此,“存储整数的变量”部分不适用。double类型用于存储浮点值,而不是整数值。它可以保存值10(如10.0),但也可以保存值3.452,该值不是整数。所以声明 double x = ..;

我读了Mala Gupta的书“OCA Java SE 8”,有一个问题如下:


正如我所知,当我们用int值声明一个双变量时(例如选项“e”double a5=10),这段代码仍然可以编译,但为什么在这种情况下选项“e”是一个不正确的答案呢?

这是一个不正确的答案,因为整数被转换为double,然后被存储


因此,“存储整数的变量”部分不适用。

double类型用于存储浮点值,而不是整数值。它可以保存值
10
(如
10.0
),但也可以保存值
3.452
,该值不是整数。所以声明

double x = ..;

不为整数值声明变量。

您是对的:从编译器,这是有效的:
double a5=10

编译器扩展
int
以将其存储为
double
,而不会产生任何副作用,因为double可以包含任何int值。
我认为这个问题和预期的答案具有误导性

问题应该是指最适合存储值的类型。

在这种情况下,e)答案是不正确的,因为它使用的类型比所需的类型大得多,因为不好的原因而消耗内存。一个
int
或甚至一个
short
就足够了

问题下面的解释很好地解释了这一点。@问题是选择“正确的代码”,选项“e”的解释是“double”,用于存储十进制,而不是整数。这听起来很有道理,但是'double'仍然与'int'值一起工作,为什么这段代码不正确?问题不在于编译哪段代码;相反,他们要求“正确的代码来声明和初始化变量以存储整数。”内存太多“这不是反对答案的好理由。正确的理由是问题指定了整数。@chrylis不明白你的论点。因为对你来说,整数不能存储为双精度?秒。这是一个令人困惑的、没有明确说明的教科书问题,针对的是背诵的学习者。我在编译“.java”文件之后打开了“.class”文件。我意识到这里的双精度值=10.0D,我猜编译器会自动将这个值转换为double,这就是为什么即使声明的值是int,代码仍然可以工作的原因。正如上面@mcepender所评论的,这是关于“是否正确存储”,而不是关于“是否可以编译”。谢谢你的回答。