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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 想飞的鱼 中级黑马   /  2014-5-1 23:09  /  1399 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    本人新手,有些东东未想明白。
    非数值类型数据,如:boolean型,它的值只有true和false,我定义一个boolean x = true的话,它在内存中怎么表示?boolean类型不占内存空间,但x里面存储的是什么?
    还望各位指点迷津,十分感谢!

6 个回复

倒序浏览
应该是直接类型转换吧, 1 or 0
回复 使用道具 举报
想飞的鱼 来自手机 中级黑马 2014-5-1 23:45:42
藤椅
付江涛 发表于 2014-5-1 23:30
应该是直接类型转换吧, 1 or 0

哦,知道了,原来布尔类型在内存中占1位,大概就是1表示true,0表示false了,感谢回答!
回复 使用道具 举报
付江涛 来自手机 金牌黑马 2014-5-2 00:57:41
板凳
想飞的鱼 发表于 2014-5-1 23:45
哦,知道了,原来布尔类型在内存中占1位,大概就是1表示true,0表示false了,感谢回答! ...

百度了一下,‘’单个boolean类型在内存中是用int类型表示的,在虚拟机里boolean在编译成字节码时会用int或byte来表示。false用整数0表示,true用非零整数表示。涉及boolean的操作是用int进行的。boolean数据是当成byte数组进行访问的。JAVA虚拟机中,基本的数据单元是字(word)大小由虚拟机的设计而定。一般为32位。虚拟机的局部变量和操作数栈都是按照字来字义的。‘’
因此,
boolean a=true;//这个a在JVM中占4个字节即:32位。
boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
int在java中占32位
回复 使用道具 举报
付江涛 发表于 2014-5-2 00:57
百度了一下,‘’单个boolean类型在内存中是用int类型表示的,在虚拟机里boolean在编译成字节码时会用int ...

boolean 不是只占一个字节码   为什么你说    因此,
boolean a=true;//这个a在JVM中占4个字节即:32位
求解
回复 使用道具 举报
﹊佑雨时杰↘ 发表于 2014-5-2 01:15
boolean 不是只占一个字节码   为什么你说    因此,
boolean a=true;//这个a在JVM中占4个字节即:32位
...

小弟不才,开始以为可以类型转换的。后来百度一下,貌似这个问题不是一个简单地问题,答案不一,所以提取了一个自己感觉对的。
1,单个boolean类型在内存中是用int类型表示的,在虚拟机里boolean在编译成字节码时会用int或byte来表示。false用整数0表示,true用非零整数表示。涉及boolean的操作是用int进行的。boolean数据是当成byte数组进行访问的。
2,JAVA虚拟机中,基本的数据单元是字(word)大小由虚拟机的设计而定。一般为32位。虚拟机的局部变量和操作数栈都是按照字来字义的。
因此,
boolean a=true;//这个a在JVM中占4个字节即:32位。
boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。
int在java中占32位

上面的回答就很明显了:
1)boolean a=true;//这个a在JVM中占4个字节即:32位。(int进行的)
2)boolean[] b = new boolean[10];//数组时,每一个boolean在JVM中占一个字节。(byte进行)
----------------------------------------------------------------------------------------------------------------------------

等@大神回答吧


回复 使用道具 举报
付江涛 发表于 2014-5-2 00:57
百度了一下,‘’单个boolean类型在内存中是用int类型表示的,在虚拟机里boolean在编译成字节码时会用int ...

恩,我也百度了下,你所说的应该是摘自《深入JAVA虚拟机》(第二版),看着网上和书中好多不同说法,官方这样描述:
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.
虽然还是很迷糊,但是却也有收获!谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马