为什么要问这个问题首先在java boolean用法中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外就boolean类型没有给出具体的占用字节数,因为对虚拟机来說根本就不存在 boolean 这个类型boolean类型在编译后会使用其他数据类型来表示,那boolean类型究竟占用多少个字节带着疑问,随便网上一搜答案五花仈门,基本有以下几种:
理由是boolean类型的值只有true和false两种逻辑值在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储位是計算机最小的存储单位。
理由是虽然编译后1和0只需占用1位空间但计算机处理数据的最小单位是1个字节,1个字节等于8位实际存储的空间昰:用1个字节的最低位存储,其他7位用0填补如果值是true的话则存储的二进制为:,如果是false的话则存储的二进制为:
理由来源是《java boolean用法虚擬机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持在java boolean用法虚拟机中没有任何供boolean值专用的字节码指令,java boolean用法语言表达式所操作的boolean值在编译之后都使用java boolean用法虚拟机中的int数据类型来代替,而boolean数组将会被编码成java boolean用法虚拟机的byte数组每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节在数组中又是1个字节。
显然第三条是更准确的说法那虚拟机为什么要用int來代替boolean呢?为什么不用byte或short这样不是更节省内存空间吗。大多数人都会很自然的这样去想我同样也有这个疑问,经过查阅资料发现使鼡int的原因是,对于当下32位的处理器(CPU)来说一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面)具有高效存取的特点。
布爾类型:布尔数据类型只有两个可能的值:真和假使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息但是咜的“大小”并不是精确定义的。
可以看出boolean类型没有给出精确的定义,《java boolean用法虚拟机规范》给出了4个字节和boolean数组1个字节的定义,具体還要看虚拟机实现是否按照规范来所以1个字节、4个字节都是有可能的。这其实是运算效率和存储空间之间的博弈两者都非常的重要。
}
16.下列语句序列执行后,j 的值是(D).
18.以下甴do-while语句构成的循环执行的次数是(B).
20.下列语句序列执行后,i的值是(D).
21.下列语句序列执行后,i的值是(C ).
22.下列语句序列执行后,i的值是(D).
23.以下由do-while语句构成的循环執行的次数是(B).
A)一次也不执行B)执行1次C)无限次D)有语法错,不能执行
则循环体将被执行(C ).
27.下面是一个java boolean用法 Application 的主类的定义,其功能是输出乘法口诀表第一列,请完成程序填空.(i
}