返回信息流java的boolean几个字节为什么会有争议?
在看cracking the coding interview 的过程中,一道题开了boolean的256长度的数组,作者提到可以在优化就是变成位向量。空间占用变成了1/8.
那么是不是就说明boolean比1bit大了。
那么这是不是意味着数组里boolean是一字节了。使用了1bit,然后7个是0.实际占用了1Byte。难道是最小的内存寻址单元就是byte,所以占用一个byte?
此外,网上有人说下面这个:
1)boolean a=true;//这个a在JVM中占4个字节即:32位。
2)boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
-------------------------------------------
这个错误的看法,网上搜了有不少人这样认为,我之前不知道在哪里看了,我也以为是这样,如下:
1/8字节。1bit。
这是一条镜像帖。来源:北邮人论坛 / java / #46482同步于 2015/12/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java的boolean几个字节为什么会有争议?
YUEYE
2015/12/15镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
int是4byte的呀。不会吧。
又更新了点信息。你帮看看。
【 在 icyfox 的大作中提到: 】
: 什么争议?没记错的话好像和int一样长
: 还有你别用大写,那是个类
数据类型包括基本类型和引用类型,
(1)基本类型包括:数值类型(包括除boolean外的所有的Java基本数据类型),boolean(在JVM中使用int来表示,0表示false,其他int值均表示true)和returnAddress(JVM的内部类型,用来实现finally子句)。
http://blog.csdn.net/witsmakemen/article/details/9163419
你说的这个题是java的吗?
嗯嗯。java的。
【 在 icyfox 的大作中提到: 】
: 数据类型包括基本类型和引用类型,
: (1)基本类型包括:数值类型(包括除boolean外的所有的Java基本数据类型),boolean(在JVM中使用int来表示,0表示false,其他int值均表示true)和returnAddress(JVM的内部类型,用来实现finally子句)。
: http://blog.csdn.net/witsmakemen/article/details/9163419
: ...................
看来是单个的时候4字节。数组的时候1字节。
我不知道在哪里看的资料,那时候说1/8字节。估计是搞混淆了。谢了。
【 在 icyfox 的大作中提到: 】
: 数据类型包括基本类型和引用类型,
: (1)基本类型包括:数值类型(包括除boolean外的所有的Java基本数据类型),boolean(在JVM中使用int来表示,0表示false,其他int值均表示true)和returnAddress(JVM的内部类型,用来实现finally子句)。
: http://blog.csdn.net/witsmakemen/article/details/9163419
: ...................
【 在 YUEYE 的大作中提到: 】
: java的boolean几个字节为什么会有争议?
:
: 在看cracking the coding interview 的过程中,一道题开了boolean的256长度的数组,作者提到可以在优化就是变成位向量。空间占用变成了1/8.
: ...................
Java语言没有规定boolean占几个字节,只是说它的值可以是true或者false。
Java虚拟机规定:一个局部变量可以存储一个boolean(long和double需要两个局部变量来存储)(注意这里的局部变量是JVM的概念,和Java的变量无关),也规定了Java虚拟机有专门的“boolean数组”。但也都没有规定“一个局部变量占多少字节”,也没有规定“boolean数组里一个元素占多少字节”。
但是JVM spec碰巧提到:Oracle的JVM里,boolean数组的元素占8个bit。但这并不意味着所有的JVM都需要这样。
http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.3.4
至于局部变量,就更灵活了。优化器可以对局部变量进行各种疯狂的优化,说不定一个boolean型的变量只是CPU里的一个flag,连寄存器都不占呢。所以,讨论局部变量占用多少子节没什么意义。
谢谢暖神。
【 在 nuanyangyang 的大作中提到: 】
:
: Java语言没有规定boolean占几个字节,只是说它的值可以是true或者false。
: Java虚拟机规定:一个局部变量可以存储一个boolean(long和double需要两个局部变量来存储)(注意这里的局部变量是JVM的概念,和Java的变量无关),也规定了Java虚拟机有专门的“boolean数组”。但也都没有规定“一个局部变量占多少字节”,也没有规定“boolean数组里一个元素占多少字节”。
: ...................