Gur*_*lki 12 java scjp compiler-errors
我知道我们不能在java中的if语句中使用赋值运算符,因为我们在其他几种语言中使用它.
那是
int a;
if(a = 1) { }
Run Code Online (Sandbox Code Playgroud)
会给出编译错误.
但是下面的代码工作得很好,怎么样?
boolean b;
if(b = true) { }
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个例外,规则不能在if语句中使用赋值.
Jon*_*eet 39
因为赋值的"结果"是赋值的值...所以它仍然是boolean第二种情况下的表达式.if表达式要求条件是一个boolean表达式,它由第二个而不是第一个表达式满足.实际上,您的两个片段是:
int a;
a = 1;
if (a) { }
Run Code Online (Sandbox Code Playgroud)
和
boolean b;
b = true;
if (b) { }
Run Code Online (Sandbox Code Playgroud)
从扩展中可以清楚地知道第二个版本将编译而不是第一个版本吗?
这是不直接与真假比较的一个原因.所以,我总是只写if (b)代替if (b == true)和if (!b)代替的if (b == false).你仍然可以得到与问题if (b == c),当b和c是boolean变量,诚然-一个错字有可能会导致一个问题.我不能说它曾经发生在我身上.
编辑:响应您的编辑 - 所有类型的分配可以在if语句 - 和while循环等中使用,只要整体条件表达式是boolean.例如,您可能有:
String line;
while ((line = reader.readLine()) != null)
{
// Do something with a line
}
Run Code Online (Sandbox Code Playgroud)
虽然我通常避免在条件中产生副作用,但这个特定的习惯用法通常对上面显示的例子或使用有用InputStream.read.基本上它是"虽然我读的价值很有用,但要使用它."
| 归档时间: |
|
| 查看次数: |
9606 次 |
| 最近记录: |