欢迎光临国标麻将

腾讯问我Java中boolean类型占几个字节?我说一个,面试官让我gun

社会 2020-06-06 22:363331国标麻将国标麻将

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

什么是boolean类型,根据http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html:

boolean:Thebooleandatatypehasonlytwopossiblevalues:trueandfalse.Usethisdatatypeforsimpleflagsthattracktrue/falseconditions.Thisdatatyperepresentsonebitofinformation,butits"size"isn'tsomethingthat'spreciselydefined.

谷歌翻译一下:

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

stackoverflow就有关于boolean占几个字节的讨论。https://stackover@AnsonA@SEO@flow.com/questions/383551/what-is-the-size-of-a-boolean-variable-in-java其中有一个高赞回答:

/***出自公众号:程序员乔戈里*/classLotsOfBooleans{booleana0,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af;booleanb0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,be,bf;booleanc0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf;booleand0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,db,dc,dd,de,df;booleane0,e1,e2,e3,e4,e5,e6,e7,e8,e9,ea,eb,ec,ed,ee,ef;}classLotsOfInts{inta0,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af;intb0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,be,bf;intc0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,cc,cd,ce,cf;intd0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,db,dc,dd,de,df;inte0,e1,e2,e3,e4,e5,e6,e7,e8,e9,ea,eb,ec,ed,ee,ef;}publicclassTest{privatestaticfinalintSIZE=100000;publicstaticvoidmainthrowsException{LotsOfBooleans[]first=newLotsOfBooleans[SIZE];LotsOfInts[]second=newLotsOfInts[SIZE];System.gc;longstartMem=getMemory;for(inti=0;i

运行结果

SizeforLotsOfBooleans:8257544Averagesize:82.57544SizeforLotsOfInts:33599984Averagesize:335.9@AnsonA@SEO@9984

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个字节的定义,具体还要看虚拟机实现是否按照规范来,https://blog.csdn.net/makingadream/article/details/53100237

Copyright © 2020 国标麻将 版权所有