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

📅  最后修改于: 2020-03-30 03:40:14             🧑  作者: Mango

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

  1. 声明:在C++中,布尔数据类型的声明涉及关键字bool的使用,而在Java中,声明是通过关键字boolean完成的。
    C++代码:
    #include
    using namespace std;
    int main()
    {
        bool a = true;
        // Java的语法
        // boolean b = false;
        return 0;
    }

    Java代码:

    class A
    {
        public static void main(String args[])
        {
            boolean a = true;
            // C++ 语法
            // bool b = false;
        }
    }
    
  2. 缺省值:缺省值是声明时最初存储在变量中的值,但未初始化为任何值。Java中布尔数据类型的默认值为false,而在C++中,它没有默认值并且包含垃圾值(仅在使用全局变量的情况下,其默认值为false)。
    C++代码:
    #include
    using namespace std;
    int main()
    {
        // 声明一个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[])
        {
            // 声明一个Java的boolean类型数组
            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;
            // 如下会报错
            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>b";
        }
        else
        {
            cout << "a

    输出:

    a>b

    Java代码:

    class a
    {
        public static void main(String args[])
        {
            boolean a = true;
            boolean b = false;
            // 如下会报错
            if (a > b)
            {
                System.out.println("a
  5. 浮点值:在C++中,浮点整数值可以轻松地分配给布尔变量,因为它们将隐式类型转换为布尔值,而在Java中这样做会导致错误。
    C++代码:
    #include
    using namespace std;
    int main()
    {
        // 在布尔值中存储整数类型
        bool a = 7;
        // 在布尔值中存储float类型
        bool b = 7.0;
        cout << a << " " << b;
        return 0;
    }

    输出:

    1 1

    上面的输出结果是将任何值存储在除0以外的布尔变量中,将导致在该变量中存储1。
    Java代码:

    class a
    {
        public static void main(String args[])
        {
            // Java的无效赋值
            boolean a = 7;
            // Java的无效赋值
            boolean b = 7.0;
            System.out.println(a);
            System.out.println(b);
        }
    }
    
  6. C++中的布尔数据类型的大小为1个字节,而Java中的布尔类型的大小未精确定义,并且取决于Java虚拟机(JVM)。
    Java中的布尔值始终占用一个以上的字节,但是到底有多少字节取决于该值的存储位置(在堆栈中还是在堆中)。JVM使用32位堆栈单元,这将导致每个布尔值占用32位完整的堆栈单元。但是,堆上布尔值的大小取决于实现。