【发布时间】:2013-04-22 13:40:11
【问题描述】:
我想知道是否可以像这样在条件运算符中为变量赋值:
if((int v = someMethod()) != 0) return v;
有没有办法在 Java 中做到这一点?因为我知道在while 条件下这是可能的,但我不确定我是否对 if 语句做错了,或者它是否不可能。
【问题讨论】:
-
那太好了。
标签: java
我想知道是否可以像这样在条件运算符中为变量赋值:
if((int v = someMethod()) != 0) return v;
有没有办法在 Java 中做到这一点?因为我知道在while 条件下这是可能的,但我不确定我是否对 if 语句做错了,或者它是否不可能。
【问题讨论】:
标签: java
变量可以赋值但不能在条件语句中声明:
int v;
if((v = someMethod()) != 0) return true;
【讨论】:
someMethod() 赋值放在声明前面。 int v = someMethod()
int foo。
while 循环应用 DRY 仍然非常有用。
您可以在if 中分配,但不能声明:
试试这个:
int v; // separate declaration
if((v = someMethod()) != 0) return true;
【讨论】:
赋值返回赋值的左侧。所以:是的。有可能的。但是,您需要在外部声明变量:
int v = 1;
if((v = someMethod()) != 0) {
System.err.println(v);
}
【讨论】:
是的,你可以在if里面给变量赋值。
我不会推荐它。问题是,当您尝试比较值时,它看起来像是一个常见错误,但使用单个 = 而不是 == 或 ===。
如果你这样做会更好:
int v;
if((v = someMethod()) != 0)
return true;
【讨论】:
boolean b = false; if ( b = true ) { //oops }
我相信您的问题是由于您在测试中定义变量 v 造成的。正如@rmalchow 所解释的,你可以将其更改为
int v;
if((v = someMethod()) != 0) return true;
还有另一个变量范围的问题。即使您尝试的方法有效,那又有什么意义呢?假设您可以在测试内定义变量范围,您的变量 v 将不存在于该范围之外。因此,创建变量并分配值将毫无意义,因为您将无法使用它。
变量只存在于它们被创建的范围内。由于您要分配值以供以后使用,因此请考虑创建变量的范围,以便可以在需要的地方使用它。
【讨论】:
是的,可以这样做。考虑下面的代码:
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;
}
}
我希望这能满足你的问题。
【讨论】:
您可以在if 语句中分配一个变量,但您必须先声明它
【讨论】:
是的,可以在 if 条件检查中进行赋值。但是,你的变量应该已经被声明为赋值了。
【讨论】:
因为我知道在 while 条件下这是可能的,但我不确定是否 我为 if 语句做错了,或者如果它不可能。
提示: while 和 if 条件应该是什么类型?
如果可以用 while 来完成,也可以用 if 语句来完成,因为它们都期望一个布尔条件。
【讨论】: