提问人:Key 提问时间:4/29/2013 最后编辑:Andrew ThompsonKey 更新时间:3/30/2023 访问量:72622
String.length() 和 String.getBytes().length 之间的区别
Difference between String.length() and String.getBytes().length
问:
我是 Java 编程的初学者和自学。
所以,我想知道 Java 和 之间的区别。String.length()
String.getBytes().length
什么更适合检查绳子的长度?
答:
该方法以字符为单位返回字符串的长度。length()
字符可能占用多个字节。该表达式使用平台的默认字符集返回字符串的长度(以字节为单位)。String.getBytes().length
评论
getLength()
String.getBytes().length
该方法返回字符串中的符号数量。While 返回用于存储这些符号的字节数。
通常,字符以 UTF-16 编码存储。因此,存储一个字符需要 2 个字节。
看看这个 SO 答案。String.length()
String.getBytes().length()
字符串.length()
String.length()
是表示字符串所需的 16 位 UTF-16 代码单元数。也就是说,它是用于表示字符串的值数,因此也等于 。对于西方语言中使用的大多数字符,这通常与字符串中的 unicode 字符(码位)数相同,但如果使用任何 UTF-16 代理项对,则码位数将小于代码单元数。这种对只需要对 BMP 之外的字符进行编码,并且在大多数写作中很少使用(表情符号是一个常见的例外)。char
toCharArray().length
String.getBytes().length
String.getBytes().length
另一方面,是在平台的默认编码中表示字符串所需的字节数。例如,如果默认编码是 UTF-16(罕见),则它将恰好是返回值的 2 倍(因为每个 16 位代码单元需要 2 个字节来表示)。更常见的是,您的平台编码将是多字节编码,如 UTF-8。String.length()
这意味着这两个长度之间的关系更加复杂。对于 ASCII 字符串,这两个调用几乎总是会生成相同的结果(除了不以 1 字节对 ASCII 子集进行编码的异常默认编码)。在 ASCII 字符串之外,可能会更长,因为它计算表示字符串所需的字节数,而计算 2 字节代码单元。String.getBytes().length
length()
哪个更合适?
通常,您将与其他字符串方法一起使用,这些方法将偏移量带入字符串。例如,要获得最后一个字符,您可以使用 .由于某种原因,您只能使用 if 来处理 返回的字节数组编码。String.length()
str.charAt(str.length()-1)
getBytes().length
getBytes
简而言之,返回字符串中的字符数,而 .length 返回使用指定编码表示字符串中字符的字节数。String.length()
String.getBytes()
在许多情况下,将具有与 相同的值。但是在编码 UTF-8 并且字符的值超过 127 的情况下,将与 .
下面是一个示例,它解释了在调用 时字符串中的字符如何转换为字节。这应该让您了解 和 之间的区别。String.length()
String.getBytes().length
String.length()
String.getBytes().length
String.getBytes()
String.length()
String.getBytes().length
上一个:索引超出范围/条件问题
评论
string.length
将给出字符串中的字符数,其中 as 将给出字符串用于存储值的字节数。在正常情况下,每个字符可以占用 2 个字节来存储 unicode 值string.getBytes().length
string.length