📜  C++和Java中布尔数据类型的比较

📅  最后修改于: 2021-05-30 17:44:59             🧑  作者: Mango

布尔数据类型是C++和Java中的原始数据类型之一。尽管它似乎是所有数据类型中最简单的,因为它只能有两个值– truefalse ,但是它肯定是一个棘手的问题,因为在Java和C++中,其用法都有某些差异,如果不小心,可能会导致错误。 C++和Java在用法上的差异是-

  1. 声明:在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;
        }
    }
    
  2. 缺省值:缺省值是声明时最初存储在变量中的值,但未初始化为任何值。 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 ,如上面的输出所示。

  3. 在数学表达式中的使用:一个重要的区别是布尔数据类型变量不能在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);
        }
    }
    
  4. 与关系运算符一起使用:在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");
            }
        }
    }
    
  5. 浮点值:在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);
        }
    }
    
  6. C++中的布尔数据类型的大小为1个字节,而Java的布尔类型的大小未精确定义,并且取决于Java虚拟机(JVM)。

    Java的布尔值始终占用一个以上的字节,但是到底有多少个字节取决于该值的存储位置(在堆栈中还是在堆中)。 JVM使用32位堆栈单元,这将导致每个布尔值占用完整的32位堆栈单元。但是,堆上布尔值的大小取决于实现。

    要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”