在 Java 中,为什么要使用 0 来初始化一个 int 变量,而在声明时默认情况下它会被赋值为 0?

发布于 2024-09-01 12:52:43 字数 88 浏览 3 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

卖梦商人 2024-09-08 12:52:43

自动赋值为零仅适用于成员,不适用于局部变量。如果它是局部变量并且省略 = 0 则该变量没有值,甚至不是零。在分配该值之前尝试使用该值将导致编译错误。例如,此代码尝试使用未初始化的局部变量:

public class Program
{   
    public static void main(String[] args)
    {
        int numOfGuesses;   // local variable
        System.out.println(numOfGuesses);
    }
}

并产生此编译错误:

Program.java:6: variable numOfGuesses might not have been initialized
        System.out.println(numOfGuesses);

而此代码使用成员工作并输出零:

public class Program
{   
    int numOfGuesses; // member variable

    public void run()
    {
        System.out.println(numOfGuesses);
    }

    public static void main(String[] args)
    {
        new Program().run();
    }
}

对于成员,如果我的代码使用初始 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:

public class Program
{   
    public static void main(String[] args)
    {
        int numOfGuesses;   // local variable
        System.out.println(numOfGuesses);
    }
}

and produces this compile error:

Program.java:6: variable numOfGuesses might not have been initialized
        System.out.println(numOfGuesses);

Whereas this code using a member works and outputs zero:

public class Program
{   
    int numOfGuesses; // member variable

    public void run()
    {
        System.out.println(numOfGuesses);
    }

    public static void main(String[] args)
    {
        new Program().run();
    }
}

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.

鲸落 2024-09-08 12:52:43

更明确;有些人喜欢。请注意,这仅适用于字段——局部变量需要初始化;没有默认值。

It's more explicit; some people like. Note that this applies only to fields -- local variables need to be initialized; there are no defaults.

做个ˇ局外人 2024-09-08 12:52:43

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

    static{
    //do something here
    }
    
  • 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

    {
    // do something here 
    }
    
  • 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文