java boolean占几个字节

米饭居士 2014-12-20 09:49:19
以下讨论基于32位cpu

卤煮整理的一些背景知识:

1. JAVA规范没有明确指出boolean占几个字节
2. JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理。
3. JVM以计算机的字长作为最小处理单位。

卤煮的问题:

既然JVM以字长作为最小处理单元,那么byte,short 类型也要占用一个字长即32位吗?
如果不是,也就是说可以把byte当1字节处理,short当2字节处理,那么为什么要把boolean作为4字节处理,岂不是更浪费内存空间。
...全文
2656 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdzbsj 2016-05-11
  • 打赏
  • 举报
回复
32bit 4字节 不用在纠结 了
vcassv 2015-02-22
  • 打赏
  • 举报
回复
short也是和int一样多的,没错。
zqfddqr 2015-02-20
  • 打赏
  • 举报
回复
我记得看过 和int是一样的。其实不差这一点的
mr_wangb 2015-02-03
  • 打赏
  • 举报
回复
早就忘了
C2015N 2015-02-02
  • 打赏
  • 举报
回复
同问,。。。。。。。
cfm2000 2015-02-02
  • 打赏
  • 举报
回复
其实从性能来看,32位的机器,处理32位的int是最快的。比byte,short等都会快很多。所以放置一个type时最好的选择是int type。 short,byte,long甚至char其实它们的字节数都是有含义的。所以java需要指定字节。而boolean字节完全没有意义,就按照最快的来算了。 不过由于使用虚拟机的问题。即使是64位的机器,int还是在使用32位。这时,可能会有些影响。
my_mtx 2015-01-30
  • 打赏
  • 举报
回复
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.
liu976899732 2015-01-30
  • 打赏
  • 举报
回复
boolean占1个bit,1/8个字节
  • 打赏
  • 举报
回复
32 位 CPU 使用 4 个字节是最为节省的,哪怕你是 1 个 bit 他也是占用 4 个字节。因为 CPU 寻址系统只能 32 位 32 位地寻址。
Jevon__Wang 2014-12-31
  • 打赏
  • 举报
回复
应该是占一个位
H_snail 2014-12-25
  • 打赏
  • 举报
回复
你可以看看官方文档,明确说明boolean代表的是一位的信息,但是所占的字节没有说,不要想当然和其他语言一样了,而且think in java 中写的时候也没说占几个字节
蜗牛爬珠峰 2014-12-25
  • 打赏
  • 举报
回复
JVM可以按实际需要组织其信息吧,虽然不是固定字节数,但和c++ 中的int字节数不固定是不同的。
引用 11 楼 stephenhawke 的回复:
boolean不是数字,只能有两个值,只代表1比特信息,其字节大小并没有确切的定义。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
蜗牛爬珠峰 2014-12-25
  • 打赏
  • 举报
回复
boolean不是数字,只能有两个值,只代表1比特信息,其字节大小并没有确切的定义。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
honpery 2014-12-25
  • 打赏
  • 举报
回复
1个字节=8位(bit)
lanzayzen_2015 2014-12-23
  • 打赏
  • 举报
回复
byte,char,boolean,short对这些类型的任何一个进行算术运算, 都会获得一个int结果。
  • 打赏
  • 举报
回复
3. JVM以计算机的字长作为最小处理单位。 对这句话存在怀疑,jvm的最小处理单元不太可能是计算机字长吧.,所谓字长是同一时间中处理二进制数的位数, 字长可以是很多字节数组的加起来进行处理。 我认为是一个字节,boolean在表示的时候是只有0和1,为八分之一个字节,但是放到jvm中运行的时候, 最小单位为一个字节,将提升为1byte
mjh_1228 2014-12-23
  • 打赏
  • 举报
回复
1个字节 啊
jc0803kevin 2014-12-21
  • 打赏
  • 举报
回复
在java的基本数据类型中,boolean占一个字节,默认值为false.取值范围是{true,false}
wyc_ 2014-12-21
  • 打赏
  • 举报
回复
考虑是内存对齐的原因
shadon178 2014-12-21
  • 打赏
  • 举报
回复
不确定,官方文档的说法也不是很明确。
加载更多回复(2)
​ 博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌项目名称基于Web的酒店客房管理系统的设计与实现系统说明3.2.1  用户模块功能分析前台模块应主要包括用户登录模块、用户注册模块、查看客房信息模块、客房预定 模块、用户留言模块、充值模块和个人信息维护模块。用户登录模块:用户通过输入注册的的账号和密码,然后进行身份验证,匹配成功 后实现登录功能。用户注册模块:用户输入合法的账号和密码可以实现注册功能。 查看客房信息模块:用户可以通过首页查看客房的价格,图片,详情等信息,从而   可以选择想要预定的房间。 客房预定模块:用户选择自己想要预定的客房后,可以通过输入相关信息进行订房操作。用户留言模块:用户可以向管理员发送留言。 充值模块:用户可以通过添加银行卡再为自己进行充值操作。 个人信息维护模块:用户可以修改自己的姓名、密码、身份证号等信息,还可以查看自己的订单。3.2.2  管理员模块功能分析对于管理员而言,一个好的管理系统总是能让酒店的管理工作事半功倍[7]。管理员 能够通过这个系统对自己的酒店情况一目了然,应该包括客户留言模块、客房管理模 块、订房信息管理模块、入住信息管理模块、统计分析模块、酒店新闻管理模块、会 员信息管理模块、员工信息管理模块、系统用户管理模块、个人信息维护模块。客户留言模块:管理员可以查看并回复用户的留言。客房管理模块:管理员可以管理客房信息,可以添加新的客房,删除已经停用的客房信息,还可以修改现有的客房信息。订房信息管理模块:管理员可以处理用户的订房请求,为用户办理入住手续。入住信息管理模块:对于没有注册的线下客户,也可以办理入住手续。统计分析模块:可以对酒店所有的入住信息进行记录和总结分析。酒店新闻管理模块:管理员可以更新网站上的新闻公告,展示图片等信息。会员信息管理模块:管理员可以查看到所有的注册会员信息,可以对会员信息进行删除,修改,添加操作。员工信息管理模块:管理员可以查看到自己公司所有的员工信息,而且还可以对员工的相关信息进行管理。系统用户管理模块:管理员可以查看到所有的系统管理员信息并对管理员信息进行管理。个人信息维护模块:管理员可以更改自己的登录密码或者是姓名、性别、手机号等 相关个人信息。​编辑 环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本;6.是否Maven项目:否;技术栈1. 后端:Spring+SpringMVC+Mybatis2. 前端:JSP+CSS+JavaScript+jQuery使用说明1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;4. 运行项目,在浏览器中输入http://localhost:8080/ 登录运行截图​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑 用户管理控制层:package com.houserss.controller;import javax.servlet.http.HttpSession;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.houserss.common.Const;import com.houserss.common.Const.Role;import com.houserss.common.ServerResponse;import com.houserss.pojo.User;import com.houserss.service.IUserService;import com.houserss.service.impl.UserServiceImpl;import com.houserss.util.MD5Util;import com.houserss.util.TimeUtils;import com.houserss.vo.DeleteHouseVo;import com.houserss.vo.PageInfoVo;/** * Created by admin */@Controller@RequestMapping(/user/)public class UserController if (ip != null && ip.length() > 0) String[] ips = ip.split(,);for (int i = 0; i  

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧