我想知道是否有可能分配一个变量的值条件运算符中,像这样的变量值:分配内if语句
if((int v = someMethod()) != 0) return v;
是否有某种方式在Java中做到这一点?因为我知道在while
的条件下可能会出现这种情况,但我不确定我是否为if语句做错了,或者如果它不可行。
我想知道是否有可能分配一个变量的值条件运算符中,像这样的变量值:分配内if语句
if((int v = someMethod()) != 0) return v;
是否有某种方式在Java中做到这一点?因为我知道在while
的条件下可能会出现这种情况,但我不确定我是否为if语句做错了,或者如果它不可行。
变量可以被分配但条件语句中不声明:
int v;
if((v = someMethod()) != 0) return true;
是的,你可以在if中指定变量的值。
我不会推荐它。问题是,您尝试比较值时看起来像是一个常见错误,但使用单个=
而不是==
或===
。
这将是更好,如果你做这样的事情:
int v;
if((v = someMethod()) != 0)
return true;
您可以指定if
声明的内部变量,但你必须先申报
因为我知道这是可能的,而在conditi ons,但我不知道如果 我对if语句做错了,或者如果它不可能。
建议:什么类型,而如果条件应该是?
如果可以用while完成,可以用if语句完成,因为它们都期望布尔条件。
赋值返回赋值的左侧。所以:是的。有可能的。但是,您需要在外部声明变量:
int v = 1;
if((v = someMethod()) != 0) {
System.err.println(v);
}
按照[规范](http://docs.oracle.com/javase/specs/jls/se7/ html/jls-15.html#jls-15.26),赋值返回_left_-hand端的值(被赋值的变量)。 – StenSoft 2015-03-12 15:45:32
@rmalchow修正,你不一定要初始化变量,它取决于什么如果语句没有,如果它返回,例如,则不需要初始化。 – randomUser56789 2015-07-30 11:24:40
@StenSoft - true。但是...我想知道,除了implit cast之外 - 就像在long i =(int)2; - 这会有什么意义吗? – rmalchow 2016-07-23 06:50:30
是的,如果条件检查可以分配内部。但是,你的变量应该已经被声明来分配一些东西。
可以分配,但不声明,内部的if
:
试试这个:
int v; // separate declaration
if((v = someMethod()) != 0) return true;
我相信,你的问题是由于您所定义的变量的事实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;
}
}
我希望这会满足您的问题。
因此,如果您需要声明,只需在声明前面放置'someMethod()'赋值。 'int v = someMethod()' – wviana 2016-02-17 19:53:18
皮蒂,对我没有oneliner :( – 2016-12-20 09:02:42
我pitty的oneliner>:D – 2017-04-06 16:15:08