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


当前回答

要避免try catch,请使用:

String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
System.out.println(b.length);

其他回答

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

In Java, there's usually no need for a sizeof function, because we never allocate memory to store a data structure. We can have a look at the String.java file for a rough estimation, and we see some 'int', some references and a char[]. The Java language specification defines, that a char ranges from 0 to 65535, so two bytes are sufficient to keep a single char in memory. But a JVM does not have to store one char in 2 bytes, it only has to guarantee, that the implementation of char can hold values of the defines range.

sizeof在Java中没有任何意义。但是,假设我们有一个大的String并且一个char分配两个字节,那么String对象的内存占用至少是2 * str.length()字节。

迂腐的答案(虽然不一定是最有用的答案,这取决于你想对结果做什么)是:

string.length() * 2

Java字符串物理存储在UTF-16BE编码中,每个代码单元使用2个字节,而String.length()以UTF-16代码单元测量长度,因此这相当于:

final byte[] utf16Bytes= string.getBytes("UTF-16BE");
System.out.println(utf16Bytes.length);

这将告诉你内部char数组的大小,单位是字节。

注意:“UTF-16”将给出与“UTF-16BE”不同的结果,因为前者编码将插入一个BOM,将数组长度增加2个字节。

要避免try catch,请使用:

String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
System.out.println(b.length);

如果你运行64位引用:

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

换句话说:

sizeof(string) = 36 + string.length() * 2

对于32位虚拟机或64位虚拟机,如果有压缩OOPs (-XX:+UseCompressedOops),则引用为4字节。所以总数是:

sizeof(string) = 32 + string.length() * 2

这没有考虑到对字符串对象的引用。

试试这个:

Bytes.toBytes(x).length

假设你之前声明并初始化了x