Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在双、int、长和短两种类型中,有多少人可以在空白处填充此代码输出0?_Java_Static - Fatal编程技术网

Java 在双、int、长和短两种类型中,有多少人可以在空白处填充此代码输出0?

Java 在双、int、长和短两种类型中,有多少人可以在空白处填充此代码输出0?,java,static,Java,Static,选项: 一 B.两个 C.三 D.四 我书中的答案是: C.由于defaultValue是一个实例变量,它会自动初始化为该类型的相应值。对于double,默认值为0.0。相比之下,int、long和short的值都是0。因此,选项C是正确的 现在我的问题是defaultValue是一个静态变量,它怎么可能是一个实例变量?它不应该有任何初始值。请纠正我,因为我知道我在什么地方错了。我正在学习OCA java认证考试,我在Scott Selikoff和Jeanne Boyarsky的一本书中发现了这

选项:

B.两个

C.三

D.四

我书中的答案是:

C.由于defaultValue是一个实例变量,它会自动初始化为该类型的相应值。对于double,默认值为0.0。相比之下,int、long和short的值都是0。因此,选项C是正确的

现在我的问题是defaultValue是一个静态变量,它怎么可能是一个实例变量?它不应该有任何初始值。请纠正我,因为我知道我在什么地方错了。我正在学习OCA java认证考试,我在Scott Selikoff和Jeanne Boyarsky的一本书中发现了这个问题。

C。因为defaultValue是一个实例变量,所以这个语句是错误的,因为defaultValue不是一个实例变量,它是一个类变量,因为它的声明包含static关键字。静态变量与包含它们的类相关联。另一个值得一提的事实是,静态变量是在实例变量实例变量不包含static作为其修饰符之前初始化的——每个实例都有自己的变量,该变量中的任何更改都不会影响其他实例的变量


现在我的问题是defaultValue是一个静态变量,它怎么可能是一个实例变量?它不应该有任何初始值。-这种说法是错误的。它不是一个实例变量,而是一个类变量。无论如何,它将具有初始值,因为只有局部变量未初始化为其默认值。局部变量是那些作用域为声明它们的方法的变量。例如,如果您在main方法或任何其他方法的范围内声明了defaultValue,则不会将其初始化为默认值

当程序开始执行,并且您尚未为变量指定任何特定值时,包含基元类型的变量将初始化为其默认值。您可以在下面的链接中看到这些默认值的列表,而包含对象的变量将初始化为null

此处,在“默认值”段落中,是分配给基元类型的值列表:

声明为类成员变量的静态或实例变量,且未分配值的变量将被分配其默认值。注意defaultValue是一个静态类成员变量

声明字段时并不总是需要赋值。已声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或null,具体取决于数据类型

将指定的默认值如下所示

在给定的四种基本类型double、int、long和short中,每种类型都将分配0,但是,输出取决于基本类型如何转换为字符串。从基元生成字符串的方式几乎相同,只是每个基元类型的方法不同。让我们检查int基元类型:

通过调用System.out.PrintLnit i,您可以有效地调用System.out.printint i,使用line.separator终止该行,如System.out.printint i方法中所述,该方法使用string.valueOfint i生成的字符串,该字符串根据平台的默认字符编码转换为字节。最后,显示String.valueOfint i充当Integer.toStringint i的包装器

因此,原语类型的字符串值是通过调用toString方法生成的,该方法将原语值作为包装类上的参数,对应于int、Short等原语类型整数

这些方法如何将其默认值转换为字符串?问题double、int、long和short中的所有原语值都为double指定了默认值0.0d。每个包装器类的toStringprimitive_类型值表示:

:

如果m为零,则用字符0.0表示;因此,负零产生结果-0.0,正零产生结果0.0

:

返回表示指定整数的字符串对象。参数转换为带符号的十进制表示形式并作为字符串返回,就像参数和基数10作为toString,int方法的参数给出一样

如果幅值为零,则由单个零字符“0”\u0030表示

:

返回表示指定长字符串的字符串对象。参数被转换为带符号的十进制表示形式,并作为字符串返回,就像参数和基数10作为toStringlong,int方法的参数一样

如果幅值为零,则由单个零字符“0”\u0030表示

:

返回表示指定短字符串的新字符串对象。假设基数为10。请注意,我 查看代码表明,该方法只是返回Integer.toString的包装器,10


因此,当值为0时,int、long和short都将输出字符“0”,而double值将打印字符“0.0”。

正如您所怀疑的,书中的答案动机不正确

因为defaultValue是一个实例变量

它是一个静态变量。如果它是一个实例变量,这段代码甚至不会编译

它会自动初始化为该类型的相应值

正确,但这适用于实例变量和静态变量

对于double,默认值为0.0。相比之下,int、long和short的值都是0

它没有“对比”。在所有这些情况下,默认值实际上都是零。System.out.println将在double和float的情况下打印0.0,但变量中的内容与零无法区分

因此,选项C是正确的

关于它没有“因此”。这里有几个不符合逻辑的错误,还有几个事实错误

我在Scott Selikoff和Jeanne Boyarsky的一本书中发现了这个问题


很高兴知道,所以我们可以避免它。

书中所写的内容是正确的,除了它所说的那一行,因为defaultValue是一个实例变量。因为defaultValue是一个静态变量,所以它不能是一个实例变量,而是一个类变量。由于它是一个类变量,因此会自动初始化为该类型的相应值

在类级别声明的实例变量以及静态变量将始终设置默认值。没有文档说明仅实例变量应具有默认值。它不是实例变量,但这并不意味着它没有任何初始值。如果它是静态的,则只意味着此成员将在实例变量之前初始化为其初始值。不,这远远不是静态的唯一含义。@JonSkeet当然你是对的。这不是我的意思,谢谢你指出。你能给我一个在这里投反对票的理由吗?我没有投反对票,但我仍然认为这不是一个好的答案。我没有把我的评论完全指向你,但很高兴知道我仍然需要改进我的答案。
static _____ defaultValue;

public static void main(String[] args){

    System.out.println(defaultValue);

}