今天在看《ThinkInJava》学习的时候,看到Java中boolean类型无法参与和其它类型的运算时,我产生了这些疑惑:
1.Java的boolean和C的bool是否相同?
2.Java的boolean存储方式是什么?占用空间多少?
3.为什么Java的boolean无法和其它数据类型如int作运算?
搜了很多资料,感觉这个网站基本解决了我的所有困惑:
https://www.geeksforgeeks.org/comparison-boolean-data-type-c-java/
我凭借我现在的理解,依次来回答这些问题吧。
1.不同。C中的bool以单字节整形的形式进行存储,可以用%d的形式输出。而且C中的bool可以参与与其它类型元素的运算。
2.存储方式都是0或者1,占用空间取决于虚拟机。比较主流的答案是4字节(32比特来存一个只需要1比特就足够的信息,真是奢侈)。
3.因为Java的编译器锁定了boolean类型和其它类型不一样,在输出是boolean的输出结果是true/false,和C的0/1不一样。所以可以认为,不允许做运算(运算会报错)是Java编译器干的好事。
顺带一提,我还有新发现。在C中对bool类型进行赋值的时候会出现自动转换。非0的值会被自动转化成1,只有0值才会对应false。
如:
bool a = -7.3;
printf("%d,%d,%d",a, a == -7.3,a == true);
在C语言中并没有编译错误,输出结果是1,0,1
。
感谢大家的支持和点赞。