繁体   English   中英

如果条件在 java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM