当前位置: 首页 > 面试题库 >

Java中布尔变量的大小是多少?

封鸿雪
2023-03-14
问题内容

谁能说出Java 中布尔值的位大小?


问题答案:

它取决于虚拟机,但是很容易将代码从类似的问题改编成关于Java中字节的问题:

class LotsOfBooleans
{
    boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
    boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
    boolean c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
    boolean d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
    boolean e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}

class LotsOfInts
{
    int a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
    int b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
    int c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
    int d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
    int e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}


public class Test
{
    private static final int SIZE = 1000000;

    public static void main(String[] args) throws Exception
    {        
        LotsOfBooleans[] first = new LotsOfBooleans[SIZE];
        LotsOfInts[] second = new LotsOfInts[SIZE];

        System.gc();
        long startMem = getMemory();

        for (int i=0; i < SIZE; i++)
        {
            first[i] = new LotsOfBooleans();
        }

        System.gc();
        long endMem = getMemory();

        System.out.println ("Size for LotsOfBooleans: " + (endMem-startMem));
        System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));

        System.gc();
        startMem = getMemory();
        for (int i=0; i < SIZE; i++)
        {
            second[i] = new LotsOfInts();
        }
        System.gc();
        endMem = getMemory();

        System.out.println ("Size for LotsOfInts: " + (endMem-startMem));
        System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));

        // Make sure nothing gets collected
        long total = 0;
        for (int i=0; i < SIZE; i++)
        {
            total += (first[i].a0 ? 1 : 0) + second[i].a0;
        }
        System.out.println(total);
    }

    private static long getMemory()
    {
        Runtime runtime = Runtime.getRuntime();
        return runtime.totalMemory() - runtime.freeMemory();
    }
}

重申一下,这取决于VM,但是在运行Sun的JDK build 1.6.0_11的Windows笔记本电脑上,我得到以下结果:

Size for LotsOfBooleans: 87978576
Average size: 87.978576
Size for LotsOfInts: 328000000
Average size: 328.0

这表明,Sun的JVM基本上可以将布尔值打包成一个字节。



 类似资料:
  • 问题内容: 我声明一个布尔变量。例如, 现在,如果我执行以下代码段: 我懂了。好吧,我知道它很明显,但是我需要知道其背后的原因。 问题答案: 当您评估对象的布尔值时,Java会将其取消装箱(自装箱功能,自1.5开始)。因此,实际的代码是:。然后它抛出。对于任何装箱的值,将空对象拆箱将引发此异常。 在1.5之前,您必须手动将值拆箱:所以它更明显(也更加冗长:)

  • 问题内容: 在Linux上的环境变量中可以存储的数据量是否有限制,如果可以,它是什么? 对于Windows,我发现以下KB文章总结为:Windows XP或更高版本:8191个字符Windows 2000 / NT 4.0:2047个字符 问题答案: 我认为Linux上没有针对每个环境的变量限制。所有环境变量的总大小在execve()时受到限制。有关更多信息,请参见此处的“参数和环境大小的限制”

  • 照例,每个类型的值都有一个相应类型的变量。C++中的布尔类型叫做bool。布尔变量的使用和其他类型类似,如: bool fred; fred = true; bool testResult = false; 第一行是一个简单的变量声明;第二行是个赋值;第三行是声明和赋值的组合,叫做初始化。 前面提到过,比较操作符的结果是布尔值,所以可以将结果保存在布尔变量中,如: bool evenFlag =

  • 假设有m个不同的布尔变量,c1,c2,..cm。如何评估它们是否都是真的,或者这些要素中的任何一个都不是真的等等,一个一个地检查,可以非常高效。

  • 问题内容: 众所周知,java使用以下数据类型 如果我创建一个像 现在的问题是大小尺寸是。请以适当的理由给我澄清。 谢谢, Anil Kumar C 问题答案: 对象的内存大小取决于体系结构,主要取决于VM是32位还是64位。实际的VM实施也很重要。 对于每个对象,您需要为其对象标头(在64位VM上通常为2 * 8字节),其字段(根据VM的实现需要额外的对齐空间)的空间。然后将最后的空间四舍五入到

  • 如何在JavaScript中翻转布尔变量的值,而不必两次包含变量名称?所以呢 没有写两次。