【问题标题】:Java syntax: Why does this variable declaration work?Java 语法:为什么这个变量声明有效?
【发布时间】:2014-05-30 10:13:24
【问题描述】:

这里发生了什么?这对我来说似乎很奇怪。

public int v0, v1 = v0++, v2;

【问题讨论】:

    标签: java variables syntax


    【解决方案1】:

    它声明了所有三个实例成员(我知道它们是实例成员,因为您没有收到错误),就好像它们是单独声明的一样,并将其中一个显式初始化为 v0++ 的值,即是v0 在递增之前的值:

    public int v0;
    public int v1 = v0++;
    public int v2;
    

    你也可以这样想:

    public int v0;
    public int v1;
    public int v2;
    
    // (In a constructor)
    v1 = v0++;
    

    这是有效

    public int v0 = 0;
    public int v1 = 0;
    public int v2 = 0;
    
    // (In a constructor)
    v1 = v0++;
    

    实例创建后,变量会有这些值:

    v0: 1 因为它是递增的
    v1: 0 因为它在增量之前*收到了 `v0` 的值
    v2: 0 因为这是 `int` 实例成员的默认值

    我说“实例成员”是因为如果这些是方法中的变量而不是类的实例成员,您会收到一个错误,抱怨您在初始化之前使用了v0(编辑:呃,嗯,然后是public 的东西——doh!)

    【讨论】:

    • 谢谢,非常感谢!
    【解决方案2】:

    等于:

    public int v0;
    public int v1 = v0++;
    public int v2;
    

    【讨论】:

    • 我明白了!我误解并认为这个集合 v0 AND v1 分别等于 v0 递增和一个新变量 v2。
    • 没问题,看@T.J.的回答。克劳德以获得更详细的解释。
    【解决方案3】:

    基本上,你可以这样:

    public int v0;
    public int v1 = v0++;
    public int v2;
    

    这是一种更有效地添加多个变量的方法。 如果你不明白v1 = v0++,这是一种说v1 = v0; v0 = v0 + 1;的方式。 所以v1 将得到v0 的值,然后v0 将得到+ 1。所以让我们说v0 = 5,然后v0++ -> v1 = 5v0 + 1 -> 5 + 1 -> v0 = 6;

    我发现像这样设置你的变量更好:

    public int v0, 
               v1 = v0++,
               v2;
    

    【讨论】:

    • v0++ 表示 v0 = v0 + 1(增量 v0)。 v1 = v0++ 表示将 v1 设置为 v0 的当前值,然后增加 v0(v0 获取新值,v1 将具有 v0 的 old 值)。 v1 = ++v0 表示增加 v0,然后将 v1 设置为 v0 的新值(两者将具有相同的值)。
    • 我注意到了您的编辑,但您仍然弄错了。 ++only 为您提供一个递增的值以存储在另一个变量中,它还会递增源变量。 ++ 的位置(在变量名之前或之后)也决定了行为并且可以给出非常不同的结果!这也适用于--
    • Ergo: "所以假设 v0 = 5,那么 v0++ -> v0 + 1 -> 5 + 1 -> v1 = 6" 如果它是正确的++v0v0++ 是错误的。这种情况下的正确结果是 v1 变为 5,而 v0 变为 6。
    【解决方案4】:

    上面的代码会给出一个语法错误:v0 可能没有被初始化。 即使你尝试将 vo 和 v1 分开,代码仍然会给你语法错误。

    【讨论】:

    • 你为什么不test it?我做到了,它运行良好。没有语法错误。即使没有分开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多