A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曾祥彬 于 2012-6-18 16:42 编辑

在以前学习C或C++的时候,有一个函数sizeof可以求的一个数据项分配的字节数,为什么在java里面没有提供这样的函数?
那么我们如何知道一个数据分配项占用了多少个字节呢?难道每次不确定的时候都要翻文档查询吗?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
java里面基本数据类型所占有的字节数都是一样的哈,与机器无关。
回复 使用道具 举报
java中没有这样的功能计算占用字节数的,字节数都是固定的,查下表
byte b; 1字节    short s; 2字节
int i; 4字节      long l; 8字节
char c; 2字节(C语言中是1字节)
float f; 4字节   double d; 8字节
boolean bool; false/true

汉字是占两字节,可以通过下面代码来实验
class BytesDemo {



    public static void main(String[] args) {

       String ChineseCharacter="我";

       System.out.println(ChineseCharacter.getBytes().length);

    }



}

运行后的结果输出为2

回复 使用道具 举报
C中要使用sizeof主要是因为C程序员要自己管理堆内存的分配和释放,在使用malloc来获取堆内存时,我们必须知道要创建的对象的具体大小,才能根据对象的具体大小从堆中分配相应大小的动态内存,而获取对象大小这个工作就是通过sizeof来完成的。而java中的内存管理任务直接交给了JVM。因此,java中不存在类似sizeof的操作符。
如果楼主真的想实现sizeof功能,可以使用新提供的Instrument包。通过这个包提供的接口和类,我们可以很容易获取一个对象实际占用的内存大小。不过这个得jdk5.0以上。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  int 4个字节(32bit) -2,147,483,648到2,147,483,647 默认为0
  short 2个字节(16bit) -32,768到32,767  默认为0
  long 8个字节(64bit) -9,223,372,036,854,775,808L到9,223,372,036,854,775,807L  默认为0L
  byte 1个字节(8bit) -128到127  默认为0
  float 4个字节(32bit) 约+—3.40282347E+38F(6~7个有效的十进制数位) 默认为0.0F

  double 8个字节(64bit) 约+-1.79769313486231570E+308(15个有效数位)  默认为0.0D
回复 使用道具 举报

int 4个字节(32bit),short 2个字节(16bit) , long 8个字节(64bit) ,byte 1个字节(8bit) ,
float 4个字节(32bit) ,double8个字节(64bit),char c; 2字节(C语言中是1字节),汉字占两个字节
这些都是确定的,记住就行了

回复 使用道具 举报
刘笑 发表于 2012-6-18 09:15
C中要使用sizeof主要是因为C程序员要自己管理堆内存的分配和释放,在使用malloc来获取堆内存时,我们必须知 ...

学习了:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马