什么'条件表达式只能是布尔值,而不是整数。'意思?

时间:2010-06-14 18:03:42

标签: java c++ boolean integral conditional-expressions

'条件表达式只能是布尔值,而不是整数。'意思?我不知道Java,我知道C ++ deffenetly不应该强调它意味着什么..请帮助(在比较C ++和Java第7项子项目1 http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html中找到)

9 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分: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);

从逻辑上看,条件表达式本质上是布尔值(true或false)。但是,某些语言(如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 */ {
    // ...
}

答案 2 :(得分:4)

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

答案 3 :(得分:3)

采取声明:

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

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

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

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

答案 4 :(得分: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

答案 5 :(得分:2)

在C / C ++中你可以做到

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

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

表达式是计算值的代码。在这两种语言中,表达式都有一个静态类型,用于描述此表达式产生的值的类型。积分意味着表达式的类型是int。

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

if (32) {

}

if (2 * 17 - 33) {

}

int c;
if (c = 12) {

}

答案 8 :(得分:1)

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