(在编写原始问题的过程中,我回答了问题,但这些信息可能对其他人有用,我想到了一个新问题)
例如:
int x;
if (x = 5) { ... }
Run Code Online (Sandbox Code Playgroud)
创建错误:
类型不匹配:无法从int转换为布尔值.(因为赋值不返回
布尔值)
然而,
int x;
if ((x = 5) == 5) {
System.out.println("hi!");
}
Run Code Online (Sandbox Code Playgroud)
将打印出"嗨!"
同样地,
String myString = "";
if ((myString = "cheese").equals("cheese")) {
System.out.println(myString);
}
Run Code Online (Sandbox Code Playgroud)
打印出"奶酪"
可悲的是,
if ((int x = 5) > 2) { ... }
Run Code Online (Sandbox Code Playgroud)
不适用于在线声明.怎么会?我可以解决这个问题吗?
可悲的是,
我怀疑大多数Java开发人员会非常不同意这种情绪......
Run Code Online (Sandbox Code Playgroud)if ((int x = 5) > 2) { ... }不适用于在线声明.怎么会?
它不起作用,因为声明不是Java表达式,并且不能在Java表达式中使用.
为什么Java设计者不允许这样做?我怀疑它是以下的组合:
x单独的语句.我可以解决这个问题吗?
并非没有x在前面的声明中声明; 往上看.
(对于它的价值,大多数Java开发人员都避免使用赋值作为表达式.你很少看到这样的代码:
int x = ...;
...
if ((x = computation()) > 2) {
...
}
Run Code Online (Sandbox Code Playgroud)
Java文化倾向于使用清晰/简单的代码而非巧妙的黑客攻击,旨在用最少的代码行表达某些内容.)