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