来自:程序员乔戈里


---------------第二天--------------

什么是boolean类型,根据官方文档的描述[1]

boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.

谷歌翻译一下:

布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义

stackoverflow就有关于boolean占几个字节的讨论。 what-is-the-size-of-a-boolean-variable-in-java[2] 其中有一个高赞回答:

 /***出自公众号:程序员乔戈里*/
class LotsOfBooleans
{boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;boolean c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;boolean d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;boolean e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}class LotsOfInts
{int a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;int b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;int c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;int d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;int e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}public class Test
{private static final int SIZE = 100000;public static void main(String[] args) throws Exception{LotsOfBooleans[] first = new LotsOfBooleans[SIZE];LotsOfInts[] second = new LotsOfInts[SIZE];System.gc();long startMem = getMemory();for (int i=0; i < SIZE; i++){first[i] = new LotsOfBooleans();}System.gc();long endMem = getMemory();System.out.println ("Size for LotsOfBooleans: " + (endMem-startMem));System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));System.gc();startMem = getMemory();for (int i=0; i < SIZE; i++){second[i] = new LotsOfInts();}System.gc();endMem = getMemory();System.out.println ("Size for LotsOfInts: " + (endMem-startMem));System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));// Make sure nothing gets collectedlong total = 0;for (int i=0; i < SIZE; i++){total += (first[i].a0 ? 1 : 0) + second[i].a0;}System.out.println(total);}private static long getMemory(){Runtime runtime = Runtime.getRuntime();return runtime.totalMemory() - runtime.freeMemory();}
}

运行结果

Size for LotsOfBooleans: 8257544
Average size: 82.57544
Size for LotsOfInts: 33599984
Average size: 335.99984

Java虚拟机规范一书提到 :

•在Java虚拟机中没有任何供 boolean值专用的字节码指令,Java语言表达式所操作的 boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。•Java虚拟机直接支持 boolean类型的数组,虚拟机的 navarra指令参见第6章的newarray小节可以创建这种数组。boolean类型数组的访问与修改共用byte类型数组的baload和 bastore指令

•因为在虚拟机规范中说了,boolean值在编译之后都使用Java虚拟机中的int数据类型来代替,而int是4个字节,那么boolean值就是4个字节。•boolean类型数组的访问与修改共用byte类型数组的baload和 bastore指令,因为两者共用,只有两者字节一样才能通用呀,所以byte数组中一个byte是1个字节,那么boolean数组中boolean是1个字节。•总结:boolean在数组情况下为1个字节,单个boolean为4个字节。

Java规范中,没有明确指出boolean的大小。在《Java虚拟机规范》给出了单个boolean占4个字节,和boolean数组1个字节的定义,具体 还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的[3]

References

[1] 官方文档的描述: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
[2] what-is-the-size-of-a-boolean-variable-in-java: https://stackoverflow.com/questions/383551/what-is-the-size-of-a-boolean-variable-in-java
[3] 所以1个字节、4个字节都是有可能的: https://blog.csdn.net/makingadream/article/details/53100237

------  END  ---------

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知...相关推荐

  1. Java中boolean类型占用多少个字节

    原文地址:http://www.cnblogs.com/wangtianze/p/6690665.html?utm_source=itdadao&utm_medium=referral --- ...

  2. java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  3. java中数组的返回值是什么类型_面试必问:Java中String类型为什么设计成不可变的?...

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  4. java中boolean类型占几个字节

    java的基本数据类型中,boolean只有两种状态,默认值为false.取值范围是{true,false},理论上占1bit,实际上: 1.单个的boolean 类型变量在编译的时候是使用的int ...

  5. java中double类型占几个字节_java中各种数据类型占用字节数

    1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...

  6. 【面试常问】Java中final和finally以及finalize区别?

    说一下final和finally以及finalize区别? 在面试中如果问到这个问题,我们应该咋么回答呢?我就写一下我的看法如有错误还请个位指正! 文章目录 说一下final和finally以及fin ...

  7. java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...

  8. JAVA中基本类型占用的字节和位数

    一个字节等于8位:1 byte = 8 bit. byte:1 byte 8 bit char:2 byte 16 bit int:4 byte 32 bit short:2 byte 16 bit ...

  9. Java中char类型占几个字节?

    要想弄清楚char占用几个字节,就必须了解Unicode编码机制. 早在Unicode诞生之前,就已经有很多字符集,如美国的ASCII.表示西欧语言的ISO 8859-1.中国的GB18030等. 但 ...

最新文章

  1. python3 模块编写_python3 _pickle模块详解
  2. 运算符优先级和结合性
  3. 《系统集成项目管理工程师》必背100个知识点-19项目管理计划的内容
  4. 大数据架构师训练营学习笔记
  5. 【CI】CN.一种多尺度协同变异的微粒群优化算法
  6. html4的语法,HTML——语法
  7. 转-聚合查询变慢-详解Elasticsearch的Global Ordinals与High Cardinality
  8. JQuery-Dialog(弹出窗口,遮蔽窗口)
  9. python-day2
  10. 现货黄金短线下破1760美元/盎司
  11. sqlalchemy_外键连接表
  12. 如何优雅处理前端异常?
  13. [转载] python while循环 打印菱形
  14. Unity 动态修改鼠标指针
  15. 天津奥的斯服务器显示PKS WT,天津奥的斯电梯故障代码大全
  16. 模板,宏,atuo关键字的简述
  17. php ci 优化,CodeIgniter 性能优化
  18. Web3的流支付代表Zebec,熊市布局的价值逻辑
  19. 上海有哪些牛逼的互联网公司?
  20. 通过QQ互联实现网站第三方登录

热门文章

  1. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
  2. D.Digits 思维dp 取log乘积变成加法
  3. linux 简单dns搭建,搭建一个简易的DNS服务
  4. ubuntu mysql 改密码_tpcc-mysql 压力测试
  5. pytorch dropout_手把手带你使用字符级RNN生成名字 | PyTorch
  6. vivo是安卓手机吗_vivo手机更新安卓9.0!4款产品尝鲜:有你的吗?
  7. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
  8. redis del清除缓存java_redis zset集合操作缓存.java
  9. 0x03.基本算法 — 前缀和与差分
  10. java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息