[英]If condition in java
If
下面给出的逻辑在 C 语言中运行良好,但在 java 中不起作用......为什么......?
编译时 java 出现错误。
class test
{
public static void main(String[] args)
{
int i;
if(i=4)
System.out.println("hello");
}
}
您需要在 if 语句中使用比较运算符 ( ==
) 而不是赋值运算符 ( =
)。
在 C 中,有效赋值运算符的结果是被赋值的值。 如果您的示例在 C 中,则生成的代码将等效于if(4)
,它的计算结果为 true 语句,并且代码始终在编译器没有任何投诉的情况下执行。 Java 会检查一些您可能表示其他意思的情况,例如这个。
在 C/C++ 中,任何非零值都被视为真,零被视为假。 也就是说,int 和 bool 是可以互换的。 因此if (i = 4)
在 C/C++ 中为真。 因为i
得到值 4 ,这相当于if (4)
。 但是在 Java boolean 与 int 不同,您不能在需要 boolean 的地方使用 int。 请注意, i == 4
是 boolean 但i = 4
是 int。 最后一项作业,不比较。
我不同意它在 C 中运行良好。 它令人困惑,即使它确实编译。
这也会在 C 中打印“hello”
int i = 0;
if (i == 4) // i == 4 is not true
cout << "hi";
if (i = 4) // i = 4 which is treated as true
cout << "hello";
这就是为什么它在 Java 中是不允许的。 你必须写
int i = 0;
if (i == 4) // false
System.out.println("hello");
最接近此问题的是使用 boolean 类型。
boolean b = false;
if (b = true)
System.out.println("hello");
这可以编译,但几乎可以肯定是一个错误。
一个地方分配通常用于阅读文本行
BufferedrReader br =
String line;
// assigns and checks the value of readLine()
while((line = readLine()) != null) {
}
注意双等号==
class test
{
public static void main(String[] args)
{
int i = 4;
if(i==4)
System.out.println("hello");
}
}
它将在 C 中编译,因为 C 中的条件和 if 语句可以是 int 类型。 但是,您在您的情况下将 4 分配给i
,它也不会像您在 C 中所做的那样。
if (i=4) {
}
将在 C 中工作,但不会达到您的预期。 它实际上会检查 i 是否为非 0。
Java 强制您拥有一个计算结果为 boolean 的表达式。 因此,您需要 == 运算符。 在这种情况下,赋值运算符将评估为 int。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.