4

'条件表达式只能是布尔值,不能是整数。' 是什么意思?意思是?我不知道 Java,我知道 C++ 并不足以理解它的含义。请帮助(在http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html中的比较 C++ 和 Java 项目中找到7 分项 1)

4

9 回答 9

7

这意味着您需要一个布尔值作为条件,从整数类型的转换不会是隐式的。而不是if (x)你需要if (x != 0)等。

前者是一个intbool在 C++ 中隐式转换为的(通过!= 0),但后一个表达式直接产生一个布尔值。

于 2010-06-14T18:06:21.623 回答
6

条件和循环控制结构使用条件表达式来确定程序的控制流。

// conditional control structure
if (conditionalExpression) {
    codeThatRunsIfConditionalExpressionIsTrue();
} else {
    codeThatRunsIfConditionalExpressionIsFalse();
}

// basic loop control structure
while (conditionalExpression) {
    codeThatRunsUntilConditionalExpressionIsFalse();
}

// run-at-least-once loop control structure
do {
    codeThatRunsAtLeastOnceUntilConditionalExpressionIsFalse();
} while (conditionalExpression);

从逻辑的角度来看,条件表达式本质上是布尔值(真或假)。但是,某些语言(如 C 和 C++)允许您使用数值表达式甚至指针作为条件表达式。当非布尔表达式用作条件表达式时,它们被隐式转换为与零的比较。例如,您可以编写:

if (numericalExpression) {
    // ...
}

这意味着:

if (numericalExpression != 0) {
    // ...
}

这允许简洁的代码,尤其是在像 C 和 C++ 这样的指针语言中,空指针的测试非常普遍。然而,让你的代码简洁并不一定会让它更清晰。在 C# 或 Java 等高级语言中,不允许使用数值表达式作为条件表达式。如果你想测试一个对象的引用是否已经被初始化,你必须写:

if (myObject != null) /* (myObject) alone not allowed */ {
    // ...
}

同样,如果要测试数值表达式是否为零,则必须编写:

if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ {
    // ...
}
于 2010-06-14T18:13:22.507 回答
4

在 C++ 中,你可以说if (someInt)which 基本上等同于if (someInt != 0). 在 Java 中,只有第二种形式是合法的。

于 2010-06-14T18:06:08.407 回答
3

接受声明:

if (a > b) {
    // Do stuff
}

“条件表达式”是a > b。在 C++ 中,您可以执行以下操作

int i = foo();
if (i) {
    // do stuff
}

这是因为整数(整数值)在 0 时被视为假,否则被视为真。像 Java 这样的语言不允许您以这种方式将整数视为布尔值。

于 2010-06-14T18:07:23.437 回答
2

积分表达式:

int i = 5;
if(i) {
  //...
}

//In C/C++, if(i) gets implicitly converted to if(i != 0), Java doesn't do this for you.

布尔表达式

int i = 5;
if(i==5) {
  //...
}

//This will work in Java
于 2010-06-14T18:06:33.700 回答
2

在 C/C++ 中你可以做

int i = 5;
if( i ) { ...}

在Java中你不能因为我必须是一个布尔值

于 2010-06-14T18:06:46.797 回答
2

这意味着,在 Java 中,布尔值“true”不能与整数值“1”(或者更准确地说,与任何非零整数)互换,布尔值“false”不能与整数互换值“0”。

于 2010-06-14T18:07:08.877 回答
1

表达式是计算值的代码。在这两种语言中,表达式都有一个静态类型,用于描述该表达式产生的值的种类。Integral 表示表达式的类型是 int。

简单地说,作者强调以下每一个都是合法的 C++ 代码,而不是合法的 Java 代码,因为if' 表达式产生一个整数:

if (32) {

}

if (2 * 17 - 33) {

}

int c;
if (c = 12) {

}
于 2010-06-14T18:08:47.940 回答
1

换句话说:C/C++ 没有真正的布尔类型,它们只使用整数。Java 确实有它们——而且,它的类型比 C/C++ 更严格。

于 2010-06-14T18:11:33.930 回答