布尔数据类型是C++和Java中的原始数据类型之一。尽管它似乎是所有数据类型中最简单的,因为它只能有两个值– true或false ,但是它肯定是一个棘手的问题,因为在Java和C++中,其用法都有某些差异,如果不小心,可能会导致错误。 C++和Java在用法上的差异是-
- 声明:在C++中,布尔数据类型的声明涉及关键字bool的使用,而在Java,声明是由关键字boolean完成的。
C++代码:#include
using namespace std; int main() { bool a = true; // Syntax of Java // boolean b = false; return 0; } Java代码:
class A { public static void main(String args[]) { boolean a = true; // Syntax of C++ // bool b = false; } }
- 缺省值:缺省值是声明时最初存储在变量中的值,但未初始化为任何值。 Java的布尔数据类型的默认值为false,而在C++中,它没有默认值并且包含垃圾值(仅在使用全局变量的情况下,其默认值为false)。
C++代码:
#include
using namespace std; int main() { // Declaring a boolean type array in C++ bool a[5]; int i; for (i=0; i<5; ++i) { cout << a[i] << " "; } return 0; } 上面程序中存储在数组中的所有值都是垃圾值,并且不是固定的。
Java代码:
class A { public static void main(String args[]) { // Declaring a boolean type array in Java boolean a[]; a = new boolean[5]; int i; for(i=0; i<5; ++i) { System.out.println(a[i]); } } }
输出:
false false false false false
默认情况下,数组a中的所有值都将为false ,如上面的输出所示。
- 在数学表达式中的使用:一个重要的区别是布尔数据类型变量不能在Java的数学表达式中使用,因为它会产生错误,而在C++中则很容易使用它们。
出现这种现象的原因是,在Java,布尔变量未转换为整数值(0或1),因此不能如此使用它们。
C++代码:
#include
using namespace std; int main() { int a; bool b = true; bool c = false; a = b + c; cout << a; return 0; } 输出:
1
输出将为1,因为true将转换为值1, false将转换为值0,因此a将存储1,而相同的代码将在Java给出错误,如下所示-
Java代码:
class A { public static void main(String args[]) { int a; boolean b = true; boolean c = false; //The following line will give an error a = b + c; System.out.println(a); } }
- 与关系运算符一起使用:在Java,布尔变量不能与<,>,<=和> =之类的关系运算符一起使用,而在C++中,可以按这种方式使用它们。但是,它们可以在Java和C++中与==和!=运算符一起使用。
这可以解释为以下事实:关系运算符对数字值进行运算,并且布尔变量在Java中没有存储为数字值,而是在C++中存储为布尔值( false存储为0, true存储为1)。
C++代码:
#include
using namespace std; int main() { bool a = true; bool b = false; if (a > b) { cout << "a is greater than b"; } else { cout << "a is smaller than b"; } return 0; } 输出:
a is greater than b
Java代码:
class a { public static void main(String args[]) { boolean a = true; boolean b = false; //The following line will give an error if (a > b) { System.out.println("a is greater than b"); } else { System.out.println("a is smaller than b"); } } }
- 浮点值:在C++中,浮点型整数值可以轻松地分配给布尔变量,因为它们将隐式类型转换为布尔值,而在Java这样做会导致错误。
C++代码:
#include
using namespace std; int main() { // storing integer value in bool type variable bool a = 7; // storing floating value in bool type variable bool b = 7.0; cout << a << " " << b; return 0; } 输出:
1 1
上面的输出结果是将任何值存储在除0以外的布尔变量中,将导致在该变量中存储1。
Java代码:
class a { public static void main(String args[]) { // invalid assignment in Java boolean a = 7; // invalid assignment in Java boolean b = 7.0; System.out.println(a); System.out.println(b); } }
- C++中的布尔数据类型的大小为1个字节,而Java的布尔类型的大小未精确定义,并且取决于Java虚拟机(JVM)。
Java的布尔值始终占用一个以上的字节,但是到底有多少个字节取决于该值的存储位置(在堆栈中还是在堆中)。 JVM使用32位堆栈单元,这将导致每个布尔值占用完整的32位堆栈单元。但是,堆上布尔值的大小取决于实现。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。