首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中字符串的字节数

Java中字符串的字节数
EN

Stack Overflow用户
提问于 2010-12-08 16:49:06
回答 7查看 297.1K关注 0票数 198

在Java语言中,如果我有一个字符串x,我如何计算该字符串中的字节数?

EN

回答 7

Stack Overflow用户

发布于 2013-08-03 15:49:51

如果您运行的是64位引用:

代码语言:javascript
复制
sizeof(string) = 
8 + // object header used by the VM
8 + // 64-bit reference to char array (value)
8 + string.length() * 2 + // character array itself (object header + 16-bit chars)
4 + // offset integer
4 + // count integer
4 + // cached hash code

换句话说:

代码语言:javascript
复制
sizeof(string) = 36 + string.length() * 2

在32位VM或具有压缩OOPs (-XX:+UseCompressedOops)的64位VM上,引用是4字节。因此,总数将是:

代码语言:javascript
复制
sizeof(string) = 32 + string.length() * 2

这不考虑对string对象的引用。

票数 66
EN

Stack Overflow用户

发布于 2010-12-08 16:51:46

根据How to convert Strings to and from UTF8 byte arrays in Java的说法

代码语言:javascript
复制
String s = "some text here";
byte[] b = s.getBytes("UTF-8");
System.out.println(b.length);
票数 18
EN

Stack Overflow用户

发布于 2010-12-08 17:26:20

String实例在内存中分配一定数量的字节。也许您正在查看类似sizeof("Hello World")的内容,它将返回数据结构本身分配的字节数?

在Java语言中,通常不需要sizeof函数,因为我们从不分配内存来存储数据结构。我们可以查看String.java文件进行粗略估计,我们看到一些“int”、一些引用和一个char[]Java language specification定义char的范围是从0到65535,因此两个字节足以在内存中保留一个字符。但是JVM不必在2个字节中存储一个字符,它只需保证char的实现可以保存定义范围的值。

所以sizeof在Java语言中没有任何意义。但是,假设我们有一个很大的字符串,一个char分配了两个字节,那么String对象的内存占用至少是以字节为单位的2 * str.length()

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4385623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档