在double,int,long和short类型中,有多少可以填充空白以使此代码输出0? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在double,int,long和short类型中,有多少可以填充空白以使此代码输出0? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
static _____ defaultValue;
public static void main(String[] args){
System.out.println(defaultValue);
}
选项:
A.一个
B.二
C.三
D.四
我书中的答案:
C.由于defaultValue
是一个实例变量,它会自动初始化为该类型的相应值。对于double
,默认值为0.0
。相比之下,0
,int
和long
是short
。因此选项C是正确的。
现在我的问题是defaultValue
是一个静态变量,它怎么可能是一个实例变量?它不应该有任何初始值。请纠正我,因为我知道我错了。我正在攻读OCA java认证考试,我在Scott Selikoff和Jeanne Boyarsky的书中找到了这个问题。
声明为类成员变量的变量(静态或实例)以及未赋值的变量将被赋予其默认值。注意defaultValue是一个静态类成员变量。
声明字段时并不总是需要分配值。声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或null,具体取决于数据类型。 Primitive Data Types
将分配的默认值如下。
在给定的四种基本类型(double,int,long和short)中,每个将分配0,但是,输出取决于基元类型如何转换为String。从基元生成String的方式几乎相同,只是每种基本类型都有不同的方法。我们来看一下int基元类型:
通过调用System.out.println(int i)
,您可以使用System.out.print(int i)
来有效地调用line.separator
来终止该行,如PrintStream documentation.中所述.System.out.print(int i)
方法采用String.valueOf(int i)
生成的字符串,根据平台的默认字符编码将其转换为字节。最后,String documentation显示String.valueOf(int i)
充当Integer.toString(int i)
的包装
因此,通过调用toString()方法生成基本类型的String值,其中原始值作为对应于基元类型的包装类的参数(Integer表示int,Short表示简短等)。
这些方法如何将其默认值转换为String?问题中的所有原始值(double,int,long和short)都被赋值为默认值0(对于double为0.0d)。每个包装类的toString(primitive_type value)
声明:
如果m为零,则由字符“0.0”表示;因此,负零产生结果“-0.0”,正零产生结果“0.0”。 toString(double d)
返回表示指定整数的String对象。参数转换为带符号的十进制表示形式并作为字符串返回,就像参数和基数10作为toString(int,int)方法的参数一样。 toString(int i)
如果幅度为零,则由单个零字符'0'(' u0030')表示toString(int i, int radix)
Long:
返回表示指定long的String对象。参数转换为带符号的十进制表示形式并作为字符串返回,就像参数和基数10作为toString(long,int)方法的参数一样。 toString(long i)
如果幅度为零,则由单个零字符'0'(' u0030')表示toString(long i, int radix)
返回表示指定short的新String对象。假设基数为10. toString(short s)请注意,检查代码表明此方法只是
return Integer.toString((int)s, 10);
的包装器
因此,int,long和short将在值为0时输出字符'0',而double值将打印字符'0.0'。
你怀疑,你书中的答案是错误的动机。
由于defaultValue是一个实例变量
这是一个static
变量。如果它是一个实例变量,则此代码甚至不会编译。
它会自动初始化为该类型的相应值。
正确,但这适用于实例和静态变量。
对于double,默认值为0.0。相比之下,int,long和short为0。
关于它没有'相反'。在所有这些情况下,默认值实际上为零。 System.out.println()
将在double
和float
的情况下打印0.0,但变量中的内容从零开始不可判断。
因此选项C是正确的。
关于它没有“因此”。这里有几个非sequiturs,以及几个事实的错误。
我在Scott Selikoff和Jeanne Boyarsky的书中找到了这个问题。
很高兴知道,所以我们可以避免它。
书中写的内容是正确的,除了它所说的行“因为defaultValue是一个实例变量”。由于defaultValue是一个静态变量,因此它不能是实例变量,但它当然是一个类变量。由于它是一个类变量,因此会自动初始化为该类型的相应值。
C.因为defaultValue是一个实例变量 - 这个语句是错误的,因为defaultValue
不是一个实例变量 - 它是一个类变量,因为它的声明包含static
关键字。静态变量与包含它们的类相关联。另一个值得一提的事实是静态变量在实例变量之前被初始化(实例变量不包含static
作为它们的修饰符 - 每个实例都有自己的变量,并且该变量中的任何变化都不会影响其他实例的变量)。
现在我的问题是defaultValue是一个静态变量,它怎么可能是一个实例变量?它不应该有任何初始值。 - 这个说法是对的。它不是实例变量,而是类变量。无论如何它将具有初始值,因为只有局部变量没有初始化为它们的默认值(局部变量是那些,其范围是它们被声明的方法。例如,如果你在defaultValue
方法或任何其他方法中声明了main()
方法,它不会被初始化为其默认值。
当程序开始执行并且您没有为变量分配任何特定值时,包含基本类型的变量将初始化为其默认值(您可以在下面的链接中看到这些默认值的列表),包含对象的变量初始化为null
。
这里,在“默认值”段落中,是一个分配给基本类型的值列表:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
以上是关于在double,int,long和short类型中,有多少可以填充空白以使此代码输出0? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
java 变量数据类型转换?byte, short, char, int, long, float, double
Java语言中的String类跟byte、short、long、int、float、double、char、boolean等八大数据类型有什么不同?
Java中char,short,int,long占几个字节和多少位
c语言中如何将short,int,long,float这些类型的数值转换为字符串?