2013-04-22 48 views
60

我想知道是否有可能分配一个变量的值条件运算符中,像这样的变量值:分配内if语句

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

是否有某种方式在Java中做到这一点?因为我知道在while的条件下可能会出现这种情况,但我不确定我是否为if语句做错了,或者如果它不可行。

回答

93

变量可以被分配但条件语句中不声明:

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

因此,如果您需要声明,只需在声明前面放置'someMethod()'赋值。 'int v = someMethod()' – wviana 2016-02-17 19:53:18

+1

皮蒂,对我没有oneliner :( – 2016-12-20 09:02:42

+1

我pitty的oneliner>:D – 2017-04-06 16:15:08

4

是的,你可以在if中指定变量的值。

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

这将是更好,如果你做这样的事情:

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

您可以指定if声明的内部变量,但你必须先申报

0

因为我知道这是可能的,而在conditi ons,但我不知道如果 我对if语句做错了,或者如果它不可能。

建议:什么类型,而如果条件应该是?

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

14

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

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

按照[规范](http://docs.oracle.com/javase/specs/jls/se7/ html/jls-15.html#jls-15.26),赋值返回_left_-hand端的值(被赋值的变量)。 – StenSoft 2015-03-12 15:45:32

+0

@rmalchow修正,你不一定要初始化变量,它取决于什么如果语句没有,如果它返回,例如,则不需要初始化。 – randomUser56789 2015-07-30 11:24:40

+0

@StenSoft - true。但是...我想知道,除了implit cast之外 - 就像在long i =(int)2; - 这会有什么意义吗? – rmalchow 2016-07-23 06:50:30

1

是的,如果条件检查可以分配内部。但是,你的变量应该已经被声明来分配一些东西。

22

可以分配,但不声明,内部的if

试试这个:

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

我相信,你的问题是由于您所定义的变量的事实v在测试中。正如@rmalchow所解释的那样,它会将其变成

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

还有另一个变量作用域的问题。即使你尝试过的工作是什么,关键是什么?假设你可以在测试中定义变量作用域,那么变量v就不会在该作用域之外存在。因此,创建变量并分配值将毫无意义,因为您无法使用它。

变量只存在于它们创建的范围内。既然您正在分配值以后使用它,请考虑创建变量的范围,以便在需要时使用它。

2

是的,这是可能的。考虑下面的代码:

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; 
    }  
}   

我希望这会满足您的问题。