Java学习问题1: boolean型数据占几个字节?

问题1: boolean型数据占几个字节?
为了验证boolean型数据占几个字节,于是写了段代码,如下:

package org.study;

class Chapter1_1 {
	public static void main(String[] args){
		boolean b=true;

		System.out.println("sizeof(boolean)="+sizeof(b));
	}
}

编译发现通不过,报找不到符号sizeof(boolean),一想该不会Java里没有sizeof运算符?一查果然没有。原来Java不让操作内存这些东西了,所以没有提供sizeof。

找了一段发现讲得还行。
============================================
在C和C++中,sizeof()运算符能满足我们的一项特殊需要:获知为数据项目分配的字符数量。在C和C++中,size()最常见的一种应用就是“移植”。不同的数据在不同的机器上可能有不同的大小,所以在进行一些对大小敏感的运算时,程序员必须对那些类型有多大做到心中有数。例如,一台计算机可用32位来保存整数,而另一台只用16位保存。显然,在第一台机器中,程序可保存更大的值。正如您可能已经想到的那样,移植是令C和C++程序员颇为头痛的一个问题。
Java不需要sizeof()运算符来满足这方面的需要,因为所有数据类型在所有机器的大小都是相同的。我们不必考虑移植问题——Java本身就是一种“与平台无关”的语言。
摘自:http://www.zxbc.cn/html/20080605/56667.html

=============================================

言归正传,回到问题上来,既然不让我看,我也不知道答案,就在网上搜了下,发现讨论得真热闹。最后采用了这个答案:
答:我的结论是:
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.

原文地址:http://topic.csdn.net/u/20071128/11/19af0938-3700-4bb9-a84d-95a2908f8bbb.html

学会一点,不懂多读手册和JVM规范,在此对上述作者表示感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值