'条件表达式只能是布尔值,不能是整数。' 是什么意思?意思是?我不知道 Java,我知道 C++ 并不足以理解它的含义。请帮助(在http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html中的比较 C++ 和 Java 项目中找到7 分项 1)
9 回答
这意味着您需要一个布尔值作为条件,从整数类型的转换不会是隐式的。而不是if (x)
你需要if (x != 0)
等。
前者是一个int
将bool
在 C++ 中隐式转换为的(通过!= 0
),但后一个表达式直接产生一个布尔值。
条件和循环控制结构使用条件表达式来确定程序的控制流。
// 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 */ {
// ...
}
在 C++ 中,你可以说if (someInt)
which 基本上等同于if (someInt != 0)
. 在 Java 中,只有第二种形式是合法的。
接受声明:
if (a > b) {
// Do stuff
}
“条件表达式”是a > b
。在 C++ 中,您可以执行以下操作
int i = foo();
if (i) {
// do stuff
}
这是因为整数(整数值)在 0 时被视为假,否则被视为真。像 Java 这样的语言不允许您以这种方式将整数视为布尔值。
积分表达式:
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
在 C/C++ 中你可以做
int i = 5;
if( i ) { ...}
在Java中你不能因为我必须是一个布尔值
这意味着,在 Java 中,布尔值“true”不能与整数值“1”(或者更准确地说,与任何非零整数)互换,布尔值“false”不能与整数互换值“0”。
表达式是计算值的代码。在这两种语言中,表达式都有一个静态类型,用于描述该表达式产生的值的种类。Integral 表示表达式的类型是 int。
简单地说,作者强调以下每一个都是合法的 C++ 代码,而不是合法的 Java 代码,因为if
' 表达式产生一个整数:
if (32) {
}
if (2 * 17 - 33) {
}
int c;
if (c = 12) {
}
换句话说:C/C++ 没有真正的布尔类型,它们只使用整数。Java 确实有它们——而且,它的类型比 C/C++ 更严格。