A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题看似很简单,相信大多数同学都认为是一个字节,但是我查询到的答案,有些特别哦,呵呵,如下:

1)boolean a=true;//这个a在JVM中占4个字节即:32位。
2)boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
理由:
1)JAVA规范中没有定义boolean类型的大小。
2)但是:在JVM规范第2版中讲得十分清楚。我上边的结论就是从它当中取出来的。
根据:(JVM规范第2版 3.3.4节)
Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java virtual machine int data type.  
Where Java programming language boolean values are mapped by compilers to values of Java virtual machine type int, the compilers must use the same encoding. 而:Java virtual machine type int, whose values are 32-bit signed two's-complement integers。
Arrays of type boolean are accessed and modified using the byte array instructions  
In Sun's JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element.

那么,具体的,它应该是占几个字节呢?我也不知道这算不算钻牛角尖了,不过突然心里有这么一个疑问得不到解决,就是别扭哇,嘿嘿。
在线看到的同学们也说说自己认为的答案跟理由!我感觉这个问题,可以帮助我们了解一下程序执行时内存中数据的实际情况。
最好老师能来解答一下,谢谢!

2 个回复

正序浏览
cqhuchuan 发表于 2012-4-1 23:26
一个
byte b = 1;

恩,有道理,多谢解答!
如果声明一个Booleanp数组,它的相邻两个元素在内存中的地址距离,是不是可以用来判断实际内存占用的大小呢?
回复 使用道具 举报
一个
byte b = 1;

这个占用多大的内存呢?我并不认为会占用32bit = 4byte
32 位是运行代码的长度
比如以前是16位机器,使用 AX 寄存器,后来32位机器,变成了EAX

但并不代表内存就是这样分配的,因为EAX也是可以存取一个8位的地址空间的。

mov eax, byte prt [300000];

这样是可以的。
所以,我依然认为,boolean 使用了一个bit,但占用了一个byte,而不是4个。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马