现在的位置: 首页 > 综合 > 正文

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

2013年12月13日 ⁄ 综合 ⁄ 共 1682字 ⁄ 字号 评论关闭

问题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规范,在此对上述作者表示感谢。

抱歉!评论已关闭.