1
int x;
if(x = 10){
    //code here
}

在java中,这不起作用,在c ++中,这将起作用。

我注意到在 c++ 中,除了 false、NULL 或 0 之外,您在测试括号中输入的任何内容都被认为是 true。

例子:

boolean x = false;
if(x){
    //code here
}

int x = 0;
if(x){
    //code here
}

if(NULL){
    //code here
}

int x; //uninitalized variable which is null
if(){
    //code here
}

为什么在java中这是不可能的?还有哪些其他语言不允许这样做?

4

4 回答 4

3

原因是

if (x = 10) {
    // ...
}

在 Java 中是不允许的,它x = 10是整数类型的表达式,Java 只允许布尔表达式用于 if 条件。在 C++ 中,允许使用整数作为 if 条件。这样做的一个重要原因是为了保持与 C 的兼容性——在 C 中,没有布尔类型,因此整数在 if 条件下是完全有效的。

你可能会问:为什么 Java 不允许整数作为 if 条件?这样做的一个非常重要的原因是阻止一个常见的错误。写起来很常见

if (x = 10)

而实际上的意思

if (x == 10)

事实上,这很常见,以至于许多 C/C++ 程序员编写

if (10 == x)

相反,只是这样写一个意外的作业就更难了。

如果你真的打算执行一项任务,你总是可以写

x = 10;
// ...

因为x = 10始终为非零,因此 C++ 版本将始终输入 if。这样,您不会真正失去表现力,但确实可以防止错误。


另外,你写

int x; //uninitalized variable which is null
if () {
    // ...
}

我想你if (x)的意思是写,但这不是重点。在 C、C++ 或 Java 中,未初始化的变量不为空!Java 不允许您使用未初始化的本地变量(并且字段会自动初始化),因此您永远不能在 Java 中使用未初始化的变量。在 C/C++ 中,未初始化的变量可能为 null,但对此没有任何保证。相反,未初始化变量的值是未定义的,并且很可能是之前执行的代码留在堆栈上。 不要依赖未初始化的变量为 null - 它绝对会回来咬你。

于 2012-05-14T19:45:42.650 回答
0

Because it often lead to errors.

People wanted to write (x == 10) but wrote (x = 0). In your case

if (x = 10) 

why do you need an if at all? It only makes sense if the RHS can be 0, so let's consider

if (x = b) 

which can be 0/false in C. In Java you have to write

x = b;
if (x != 0) 

I can live without it. Sometimes I miss the shortness, but I sometimes the compiler stops me, and I don't know, how many time I would have spend in searching the error. It's really a common error - similar to (str == "foo") instead of (str.equals (foo)). Easy to understand, but people make the error although.

于 2012-05-14T21:27:31.310 回答
0

Java 与 C/C++ 的不同之处在于类型更严格。测试条件需要布尔表达式。整数表达式不会自动提升为布尔表达式。

比较器内的赋值仍然是允许的,例如这将起作用:

if (x = (1 == 1))
{
   ...
}
于 2012-05-14T19:45:45.963 回答
0

C++ 的真值评估规则与 Java 不同。有关更多信息,请参见:http ://www.cplusplus.com/forum/articles/3483/

于 2012-05-14T19:46:21.617 回答