黑马程序员技术交流社区

标题: 关于非数值型数据在内存中? [打印本页]

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


作者: 付江涛    时间: 2014-5-1 23:30
应该是直接类型转换吧, 1 or 0
作者: 想飞的鱼    时间: 2014-5-1 23:45
付江涛 发表于 2014-5-1 23:30
应该是直接类型转换吧, 1 or 0

哦,知道了,原来布尔类型在内存中占1位,大概就是1表示true,0表示false了,感谢回答!
作者: 付江涛    时间: 2014-5-2 00:57
想飞的鱼 发表于 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 01:15
付江涛 发表于 2014-5-2 00:57
百度了一下,‘’单个boolean类型在内存中是用int类型表示的,在虚拟机里boolean在编译成字节码时会用int ...

boolean 不是只占一个字节码   为什么你说    因此,
boolean a=true;//这个a在JVM中占4个字节即:32位
求解
作者: 付江涛    时间: 2014-5-2 09:30
﹊佑雨时杰↘ 发表于 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 10:05
付江涛 发表于 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.
虽然还是很迷糊,但是却也有收获!谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2