【问题标题】:Assign variable value inside if-statement [duplicate]在 if 语句中分配变量值 [重复]
【发布时间】:2013-04-22 13:40:11
【问题描述】:

我想知道是否可以像这样在条件运算符中为变量赋值:

if((int v = someMethod()) != 0) return v;

有没有办法在 Java 中做到这一点?因为我知道在while 条件下这是可能的,但我不确定我是否对 if 语句做错了,或者它是否不可能。

【问题讨论】:

  • 那太好了。

标签: java


【解决方案1】:

变量可以赋值但不能在条件语句中声明:

int v;
if((v = someMethod()) != 0) return true;

【讨论】:

  • 因此,如果您仍然需要声明,只需将 someMethod() 赋值放在声明前面。 int v = someMethod()
  • Pitty,我没有oneliner :(
  • 我很同情 oneliner >:D
  • 我很同情int foo
  • @wviana 是的,但对于为while 循环应用 DRY 仍然非常有用。
【解决方案2】:

您可以在if分配,但不能声明

试试这个:

int v; // separate declaration
if((v = someMethod()) != 0) return true;

【讨论】:

    【解决方案3】:

    赋值返回赋值的左侧。所以:是的。有可能的。但是,您需要在外部声明变量:

    int v = 1;
    if((v = someMethod()) != 0) {
        System.err.println(v);
    }
    

    【讨论】:

    • 根据specification,赋值返回-手边的值(被赋值的变量)。
    • @rmalchow 更正,你不一定要初始化变量,这取决于 if 语句的作用。例如,如果它返回,则不需要初始化。
    • @StenSoft - 是的。但是......我想知道除了隐式转换之外 - 是否像 long i = (int)2; - 这有什么意义吗?
    • @randomUser56789 你能详细说明一下吗? "if((int v = call()) != 4)" 是行不通的。
    • @rmalchow 它确实行不通。我说你不必在外面初始化变量,但你必须在外面声明它。
    【解决方案4】:

    是的,你可以在if里面给变量赋值。

    我不会推荐它。问题是,当您尝试比较值时,它看起来像是一个常见错误,但使用单个 = 而不是 =====

    如果你这样做会更好:

    int v;
    if((v = someMethod()) != 0) 
       return true;
    

    【讨论】:

    • 这很容易让你自责,因为它编译得很好......boolean b = false; if ( b = true ) { //oops }
    • @EddieB 这不像是在踢自己的脚。更多关于不知道你手中的枪的信息。 Gosling 以前者的名义把 Java 搞砸了很多,而大部分时间它与后者有关。
    【解决方案5】:

    我相信您的问题是由于您在测试中定义变量 v 造成的。正如@rmalchow 所解释的,你可以将其更改为

    int v;
    if((v = someMethod()) != 0) return true;
    

    还有另一个变量范围的问题。即使您尝试的方法有效,那又有什么意义呢?假设您可以在测试内定义变量范围,您的变量 v 将不存在于该范围之外。因此,创建变量并分配值将毫无意义,因为您将无法使用它。

    变量只存在于它们被创建的范围内。由于您要分配值以供以后使用,因此请考虑创建变量的范围,以便可以在需要的地方使用它。

    【讨论】:

      【解决方案6】:

      是的,可以这样做。考虑下面的代码:

      public class Test  
      {        
          public static void main (String[] args)       
          {       
              int v = 0;          
              if ((v=dostuff())!=0)            
              {          
                  System.out.printf("HOWDY\n");          
              }             
          }                
          public static int dostuff()       
          {             
              //dosomething              
              return 1; 
          }       
      }          
      

      我希望这能满足你的问题。

      【讨论】:

        【解决方案7】:

        您可以在if 语句中分配一个变量,但您必须先声明它

        【讨论】:

          【解决方案8】:

          是的,可以在 if 条件检查中进行赋值。但是,你的变量应该已经被声明为赋值了。

          【讨论】:

            【解决方案9】:

            因为我知道在 while 条件下这是可能的,但我不确定是否 我为 if 语句做错了,或者如果它不可能。

            提示: while 和 if 条件应该是什么类型?

            如果可以用 while 来完成,也可以用 if 语句来完成,因为它们都期望一个布尔条件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-07-31
              • 1970-01-01
              • 2014-03-05
              • 2018-04-02
              • 2017-10-25
              • 2017-10-25
              • 1970-01-01
              相关资源
              最近更新 更多