Java 在if语句中指定变量值

Java 在if语句中指定变量值,java,Java,我想知道是否可以在条件运算符中为变量赋值,如下所示: if((int v=someMethod())!=0)返回v 在Java中有什么方法可以做到这一点吗?因为我知道这在while条件下是可能的,但是我不确定我是否对if语句做了错误的处理,或者这是不可能的。是的,您可以在if中指定变量的值 我不推荐。问题是,它看起来像是一个常见错误,您尝试比较值,但使用单个=而不是=或== 如果你这样做会更好: int v; if((v = someMethod()) != 0) return true

我想知道是否可以在条件运算符中为变量赋值,如下所示:

if((int v=someMethod())!=0)返回v


在Java中有什么方法可以做到这一点吗?因为我知道这在
while
条件下是可能的,但是我不确定我是否对if语句做了错误的处理,或者这是不可能的。

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

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

如果你这样做会更好:

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

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

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

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

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

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


如果可以使用while来完成,那么可以使用If语句作为weel来完成,因为它们都需要一个布尔条件

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

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

是,可以指定内部if条件检查。但是,您的变量应该已经声明为赋值。

您可以在
中赋值,但不能在
中声明,如果

试试这个:

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

我相信你的问题是因为你在测试中定义了变量v。正如@rmalchow所解释的,如果您将其更改为

int v;
if((v = someMethod()) != 0) return true;
还有另一个变量范围的问题。即使你所尝试的成功了,那又有什么意义呢?假设您可以在测试中定义变量范围,那么变量v将不存在于该范围之外。因此,创建变量并赋值将是毫无意义的,因为您将无法使用它


变量只存在于它们创建的范围内。由于您要在以后分配使用它的值,请考虑创建变量的范围,以便可以在需要的地方使用。p> 是的,这是可能的。考虑下面的代码:

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

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

根据,赋值返回左侧的值(被赋值的变量)。@rmalchow更正,您不必初始化变量,这取决于if语句的作用。例如,如果它返回,则不需要初始化。@StenSoft-true。然而。。。我想知道,除了长i=(int)2;-这有什么意义吗?@randomUser56789你能详细说明一下吗?“if((int v=call())!=4)”就是不起作用。@rmalchow它确实不起作用。我说过你不必在外部初始化变量,但你必须在外部声明它。因此,如果你需要声明,只需将
someMethod()
assign放在声明前面
int v=someMethod()
Pitty,对我来说没有oneliner:(我Pitty the oneliner>:我很遗憾
int foo
@wviana True,但是对于
while
循环仍然非常有用。这很容易让你自食其果,因为它编译得很好……
boolean b=false;if(b=True){//oops}
@EddieB这可不像是在射自己的脚。更多的是不知道你手里的枪是什么。高斯林以前者的名义把爪哇搞得一团糟,而大部分时间都是因为后者。