【发布时间】:2012-03-22 15:21:13
【问题描述】:
惊讶地发现下面的代码
System.out.println("Character size:"+Character.SIZE/8);
System.out.println("String size:"+"a".getBytes().length);
输出这个:
字符大小:2
字符串大小:1
我假设单个字符串应该占用与单个字符相同(或更多)的字节。
我特别想知道。
如果我有一个包含多个字段的 java bean,它的大小将如何增加取决于字段的性质(字符、字符串、布尔值、向量等...)我假设所有 java 对象都有一些(可能是最小的)足迹,并且这些足迹中最小的一个将是单个字符。为了测试这个基本假设,我从上面的代码开始 - 打印语句的结果似乎违反直觉。
任何关于 java 默认存储/序列化字符与字符串的方式的见解都会非常有帮助。
【问题讨论】:
-
字符串的长度是它包含的字符数。一个字符可以用多个字节编码。
-
字符串很可能是 UTF-8 编码的,所以“a”只占一个字节。
-
@NiklasB。或者更确切地说是固定宽度的 UTF-16 ( UCS-2 ) 类型格式。