在 Java 中,为什么要使用 0 来初始化一个 int 变量,而在声明时默认情况下它会被赋值为 0?
它有什么目的?
只要阅读一本书中作者这样做的例子即可。
int numOfGuesses=0;
What purpose does it serve?
Just read an example in a book where the author has done so.
int numOfGuesses=0;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
自动赋值为零仅适用于成员,不适用于局部变量。如果它是局部变量并且省略
= 0
则该变量没有值,甚至不是零。在分配该值之前尝试使用该值将导致编译错误。例如,此代码尝试使用未初始化的局部变量:并产生此编译错误:
而此代码使用成员工作并输出零:
对于成员,如果我的代码使用初始 zalue 为零的事实,则我倾向于显式分配零,如果我的代码不使用初始值(例如,如果在构造函数或其他地方分配了值),则省略赋值。两种方式的结果都是相同的,所以这只是一个风格问题。
The automatic assignment to zero only applies to members, not to local variables. If it is a local variable and the
= 0
is omitted then that variable has no value, not even zero. Attempting to use the value before it is assigned will result in a compile error. For example this code attempts to use an uninitialized local variable:and produces this compile error:
Whereas this code using a member works and outputs zero:
For members I tend to assign to zero explicilty if my code uses the fact that the initial zalue is zero, and omit the assignment if my code doesn't use the initial value (for example if it the value is assigned in the constructor or elsewhere). The result is the same either way, so it's just a style issue.
更明确;有些人喜欢。请注意,这仅适用于字段——局部变量需要初始化;没有默认值。
It's more explicit; some people like. Note that this applies only to fields -- local variables need to be initialized; there are no defaults.
Java 编译和运行时不同。
运行程序时,所有类都会使用类加载器加载,并且它们会执行以下操作:
这是在第一次使用类时完成的。它们的执行顺序由它们在代码中的顺序定义。
运行静态块
<前><代码>静态{
//在这里做一些事情
}
初始化静态变量
public static int number;
这将被初始化为零 0;
下一组初始化是在创建对象时完成的。它们的执行顺序由它们在代码中的顺序定义。
运行非静态块
<前><代码>{
// 在这里做一些事情
}
初始化非静态(实例)变量
public int instance_number;
这就是默认初始化的时间和原因!
对于方法来说情况并非如此,因为它们没有与类类似的机制。
所以基本上这意味着您必须明确初始化每个方法变量。
在此处输入代码
The Java compilation and runtime differ.
When running the program, all classes are loaded with class loaders and they do the following:
This is done when class is used for the first time. Their execute order is defined by their order in the code.
run static blocks
initialize static variables
public static int number;
This will be initialized to zero 0;
The next group of initializations done is when creating an object.Their execute order is defined by their order in the code.
run non-static block
initialize non-static(instance) variables
public int instance_number;
And this is when and why there is default initialization!
This is not true for methods because they don't have similar mechanism as classes.
So basically this means that you will have to initialize EXPLICITLY each method variable.
enter code here