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

时间:2022-09-22 13:10:19

本文首发于微信公众号:程序员乔戈里

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

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

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

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

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

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

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

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

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.

谷歌翻译一下:

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

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

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

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

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

*就有关于boolean占几个字节的讨论。

what-is-the-size-of-a-boolean-variable-in-java

其中有一个高赞回答:

 /**
*出自公众号:程序员乔戈里
*/
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 collected
long 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中boolean类型占用多少个字节?我说一个,面试官让我回家等通知

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

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

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

Java虚拟机规范一书提到 :

  • 在Java虚拟机中没有任何供 boolean值专用的字节码指令,Java语言表达式所操作的

    boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。
  • Java虚拟机直接支持 boolean类型的数组,虚拟机的 navarra指令参见第6章的newarray小节可以创建这种数组。boolean类型数组的访问与修改共用byte类型数组的baload和 bastore指令

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

  • 因为在虚拟机规范中说了,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类型占用多少个字节?我说一个,面试官让我回家等通知

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

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

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

References:

[1] 官方文档的描述: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

[2] what-is-the-size-of-a-boolean-variable-in-java: https://*.com/questions/383551/what-is-the-size-of-a-boolean-variable-in-java

[3] 所以1个字节、4个字节都是有可能的: https://blog.csdn.net/makingadream/article/details/53100237

如果是头条用户,可以在我的头条号程序员乔戈里后台回复 资源获取价值59998元的编程和考研资料

觉得文章不错的欢迎关注我的WX公众号:程序员乔戈里

我是BAT大厂后台开发工程师,,专注分享技术干货/编程资源/求职面试/成长感悟等,关注送5000G编程资源和自己整理的一份帮助不少人拿下java的offer的面经附答案,免费下载CSDN资源。

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

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

  1. Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知

    摘自:https://www.cnblogs.com/qiaogeli/p/12004962.html 程序员乔戈里 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家 ...

  2. - Java中boolean类型占用多少个字节 MD

    目录 目录 Java中boolean类型占用多少个字节 1个bit(1位) 1个Byte(1字节,8位) 4个Byte(4字节,32位) 分析 官方文档中的描述 Markdown版本笔记 我的GitH ...

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

    为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这 ...

  4. 你真的知道Java中boolean类型占用多少个字节吗?

    为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这 ...

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

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

  6. Java中的char占用几个字节

    目录 1.概述 2.答疑 3.总结 1.概述 网上或书上都说是Java中的char占用2个字节,一直没有深入,直到接触了编码,才对此产生了疑问,今天来深入一下这个问题. 2.答疑 char在设计之初的 ...

  7. java中基本类型占用字节数

    之前一直使用c/c++开发c中各种类型占用的位数和java还是有区别的,特地找了篇文章过来对比下. 在处理网络协议的时候需要注意 在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种 ...

  8. 面试官问我&OpenCurlyDoubleQuote;Java中的锁有哪些?以及区别”,我跪了

    在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...

  9. Java中boolean类型到底占用多少字节

    虽然 Java 虚拟机定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持.在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令,在 Java 语言之中涉及到 bool ...

随机推荐

  1. 早上遇到err&lowbar;content&lowbar;decoding&lowbar;fail错误

    网站在手机端出现一个error: err_content_decoding_fail. 查了一下,应该是文件编码出问题了. 但这两天都很小代码级别的改动,编码的问题一般都是会在覆盖文件的时候才出现. ...

  2. DS实验题 Inversion

    题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...

  3. Java SE 第九讲---面向对象特征之封装1

    1.面向对象程序设计的三大基本特征:继承(Inheritence).封装(Encapsulation).多态(Polymorphism) 2.封装:类包含数据与方法,将数据与方法放在一个类中就构成了封 ...

  4. 移动端JS事件、移动端框架

    一.移动端的操作方式和PC端是不同的,移动端主要是用手指操作,所以有特殊的touch事件,touch事件包括如下几个事件: 1.手指放到屏幕上时触发   touchstart 2.手指放在屏幕上滑动式 ...

  5. ClassLoader类加载机制&amp&semi;&amp&semi;JVM内存管理

    一.ClassLoader类加载机制 在java中类加载是遵循委派双亲加载的:通过调用loadClass方法逐级往上传递委派加载请求,当找不到父ClassLoader时调用其findClass方法尝试 ...

  6. netbeans 字体发虚

    今天更新了netbeans,重启后蛋疼了,字体发虚,搜索网络后有得到如下方案: 对Archlinux,去/usr/share/netbeans/etc,里面找到netbeans.conf,给下面一行参 ...

  7. poj 3352 Road Construction&lpar;边双连通分量&plus;缩点&rpar;

    题目链接:http://poj.org/problem?id=3352 这题和poj 3177 一样,参考http://www.cnblogs.com/frog112111/p/3367039.htm ...

  8. Python shutil模块(目录和文件操作)

    import shutil #导入shutil模块 copyfileobj方法 将类文件对象fsrc的内容复制到类文件对象fdst shutil.copyfileobj(fsrc, fdst[, le ...

  9. struts2框架 转载 精华帖

    一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...

  10. 安装mysql解压 版

    记录:win10重装系统后,注册mysql服务 其实在重装系统时如果不格式化mysql所在的盘,我们的mysql是不需要重装的 操作: 1.创建mysql服务:   开始-->运行-->c ...