Java:Char vs String字节大小
Java:Char vs String字节大小
我很惊讶地发现以下代码的输出结果:\n
System.out.println("Character size:"+Character.SIZE/8); System.out.println("String size:"+"a".getBytes().length);
\n输出结果为:\n
\nCharacter size:2\nString size:1\n
\n我本以为一个单字符的字符串所占用的字节数应该与一个单字符相同(或更多)。\n特别是我想知道:\n如果我有一个包含多个字段的Java Bean,它的大小将如何根据字段的性质(Character、String、Boolean、Vector等)增加。我假设所有的Java对象都有一些(可能是最小的)占用空间,其中最小的之一应该是一个单字符。为了测试这个基本假设,我从上述代码开始 - 打印输出结果似乎与直觉相悖。\n对Java默认的字符和字符串存储/序列化方式的任何见解将非常有帮助。
Java中的字符(char)和字符串(String)的字节大小是一个常见的问题。在Java中,一个字符数组中的1个字符占用2个字节,而一个字符串(String)只包含1个字符,而不是1个字节大小。
在Java中,String对象由以下几个部分组成:
private final char value[]; private final int offset; private final int count; private int hash;
从这些部分可以确定,String对象的大小肯定比char数组大。
如果你想了解更多关于对象大小的信息,你还可以阅读关于对象头和char数组的乘积因子的相关资料。例如,可以在这里查看或者在这里查看。
这个问题的原因是人们对于字符(char)和字符串(String)的字节大小没有正确的理解。解决方法是通过查看String对象的组成部分以及了解对象头和char数组的乘积因子来确定String对象的大小。
在Java中,char和String是常用的数据类型,但是它们的字节大小是不同的。这篇文章将讨论出现这个问题的原因以及解决方法。
在给出的内容中,某些情况下了字符串的长度和大小是不同的概念。字符串的长度是指字符串中字符的个数,而大小是指字符串所占用的字节数。在Java中,一个字符(char)占用2个字节,而一个字符串(String)的大小取决于其中字符的个数以及编码方式。
对于给出的问题,问题出现的原因是作者错误地使用了字符串的长度方法(length)来获取字符串的大小。长度方法返回的是字符串中字符的个数,而不是字符串所占用的字节数。因此,结果显示的是1,因为字符串中只有一个字符。
为了正确地获取字符串的大小,可以使用getBytes()方法来获取字符串的字节数组,并使用length属性获取字节数组的长度。具体的解决方法可以参考给出的链接https://stackoverflow.com/questions/4385623。
下面是一个示例代码,用于演示如何获取字符串的大小:
String str = "Hello"; byte[] bytes = str.getBytes(); int size = bytes.length; System.out.println("字符串的大小为:" + size + "字节");
通过以上代码,可以正确地获取字符串的大小,并输出结果。这样就避免了使用错误的方法来获取字符串的大小,从而得到了正确的结果。
,Java中的char和String是常用的数据类型,但是它们的字节大小是不同的。为了正确地获取字符串的大小,需要使用getBytes()方法获取字节数组,并使用length属性获取字节数组的长度。这样就能够准确地获取到字符串的大小。
Java中的字符和字符串的字节大小差异是由于getBytes()
函数使用默认编码(通常是ISO-8859-1
)输出字符串,而内部字符char始终占用2个字节。Java在内部始终使用2字节的char数组,如果想了解更多关于编码的信息,请阅读问题评论中Oded提供的链接。
需要注意的是,getBytes()
并不实际告诉你字符串的实际内存消耗。
关于Java内部使用2字节char数组的说法可能不准确。你可以参考这个链接:javarevisited.blogspot.com.tr/2012/01/… 对我来说,Java在代码中使用的是UTF-8作为默认编码。
你可能混淆了Java中Unicode的内部内存表示(是的,每个CharSequence实现,如String,仍然使用UTF-16格式的2字节字符)和Java在特定字节编码中导入或导出内部表示(文件、网络)。如果你仍然相信你的Java版本(是哪个版本?)在内部使用UTF-8,你是如何证明这一点的?顺便说一句,getBytes()
函数的问题在于它非常古老,早在1.1版本就存在了,当时还不支持UTF-8,所以你无法预测它使用的是UTF-8。
解决这个问题的方法是使用指定编码的getBytes()
函数,例如getBytes("UTF-8")
。这样可以确保得到正确的字节大小。
总结一下,Java中字符和字符串的字节大小差异是由于getBytes()
函数使用默认编码输出字符串,而内部字符char始终占用2个字节。要解决这个问题,可以使用指定编码的getBytes()
函数。