Java中boolean到底占几个字节

看到Java的基本类型,突然想到boolean 占几个字节?第一反应:1byte

不确定,查之。在这个帖子上讨论过:

java中的 boolean 在内存中占多少字节?

但众说纷纭,没有一个令人信服的答案,唯一的线索是:boolean的大小JVM规范并没有指定。


最后在stackoverflow上找到答案(What is the size of boolean variable in Java):

It depends on Java virtual machine

可以用下面的代码粗略得出:

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 = 100000;

    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();
    }
}


我的机器运行结果:

Size for LotsOfBooleans: 8784984
Average size: 87.84984
Size for LotsOfInts: 32800000
Average size: 328.0

在我使用的JVM上boolean是1byte


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在 Java ,有以下几种基本数据类型: 1. 整数类型:byte(8 位)、short(16 位)、int(32 位)、long(64 位) 2. 浮点类型:float(32 位)、double(64 位) 3. 字符类型:char(16 位) 4. 布尔类型:boolean(1 位) 这些基本数据类型是 Java 的基础,它们都是基于二进制的,在 Java ,变量需要被明确声明为一种数据类型。 ### 回答2: Java的基础数据类型主要包括整型、浮点型、字符型和布尔型四种。 1. 整型:Java提供了四种整型数据类型,分别是byte、short、int和long。它们分别占用1、2、4和8个字节的内存空间。byte类型可以表示-128到127的整数,short类型可以表示-32768到32767的整数,int类型可以表示-2147483648到2147483647的整数,long类型可以表示更大范围的整数。 2. 浮点型:Java提供了两种浮点型数据类型,分别是float和double。float类型占用4个字节的内存空间,可以表示精度为6~7位的小数,double类型占用8个字节的内存空间,可以表示精度为15位的小数。 3. 字符型:Java使用char数据类型来表示字符,它占用2个字节的内存空间。char类型可以存储所有Unicode字符,包括英文字母、数字、文字符等。 4. 布尔型:Java使用boolean数据类型表示布尔值,它只占用1个字节的内存空间。boolean类型只有两个取值,true和false,用来表示真和假。 基础数据类型在Java是直接存储数据值的,而不是引用对象。它们是线程安全的,可以直接进行数学运算和比较操作。此外,Java还提供了包装类来处理基础数据类型,可以方便地进行类型转换和其他操作。 ### 回答3: Java的基础数据类型指的是不可再分的简单数据类型,共有8种基础数据类型。它们分别是整数类型(int和long)、浮点数类型(float和double)、字符类型(char)、布尔类型(boolean)以及字节类型(byte)。 其,整数类型用来表示整数,int类型占用4个字节,范围约为-2^31到2^31-1;long类型占用8个字节,范围约为-2^63到2^63-1。浮点数类型用来表示小数,float类型占用4个字节,范围约为-3.4E^38到3.4E^38;double类型占用8个字节,范围约为-1.7E^308到1.7E^308。 字符类型用来表示单个字符,char类型占用2个字节,范围为0到65535。布尔类型用来表示真或假,boolean类型占用1个字节,只有两个取值:true和false。字节类型用来表示字节,byte类型占用1个字节,范围为-128到127。 基础数据类型在Java是按值传递的,它们的值存储在变量或常量,可以直接进行操作和赋值。通过基础数据类型,我们可以定义变量来存储各种不同类型的数据,进行数值计算、字符处理以及逻辑判断等操作。 需要注意的是,基础数据类型只能存储简单的数值或字符,不能存储复杂的对象。如果需要存储对象,则需要使用引用数据类型,例如String类型等。基础数据类型是Java语言的基础组成部分,对于理解和使用Java编程语言具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值