为什么while循环在java和c中不同

Dhe*_*yay 1 c java

我总是记住这个问题,当我尝试执行以下操作时,c和java都有不同的输出

在C:

int i=5;

while(i--)
{
   printf(i);
}
Run Code Online (Sandbox Code Playgroud)

输出:54321

在java中

int i=5;

while(i--)       // Compilation error 
{
  System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

为什么?条件时发生编译错误

Era*_*ran 7

在Java中,整数类型(int,long等等)和布尔类型之间存在分离.因此,在需要布尔值的情况下,不能使用返回int的表达式.

因此,Java中的条件必须是:

while (i-- > 0)
Run Code Online (Sandbox Code Playgroud)

在C中,等于0的int可以被视为false,这就是为什么while (i--)有效.

PS我假设iJava代码中缺少的初始化是一个遗漏.

  • @DebosmitRay这是真的,但与问题并不完全相关,因为问题中的表达式永远不会为空. (4认同)
  • 为了与C版本保持一致,它应该是`!= 0`. (2认同)
  • @Eran正如你已经说过的那样,`0`是'false`,其他`int`值都是'true`.快速搜索发现[此链接](http://en.cppreference.com/w/cpp/language/implicit_conversion#Boolean_conversions),虽然它是C++,但它说:*值为零(对于积分,浮点和unscoped枚举)和空指针和空指针到成员的值变为"false".所有其他值都变为"真实".* (2认同)