String.length() 和 String.getBytes().length 之间的区别

Difference between String.length() and String.getBytes().length

提问人:Key 提问时间:4/29/2013 最后编辑:Andrew ThompsonKey 更新时间:3/30/2023 访问量:72622

问:

我是 Java 编程的初学者和自学。 所以,我想知道 Java 和 之间的区别。String.length()String.getBytes().length

什么更适合检查绳子的长度?

Java 字符串

评论

0赞 Andrew Thompson 4/29/2013
你的实验表明了什么?
0赞 Patashu 4/29/2013
您是否尝试过在 unicode 字符串上使用它?
3赞 Arun P Johny 4/29/2013
string.length将给出字符串中的字符数,其中 as 将给出字符串用于存储值的字节数。在正常情况下,每个字符可以占用 2 个字节来存储 unicode 值string.getBytes().length
1赞 sleske 2/15/2016
@ArunPJohny:否,将返回字符串中“Unicode 代码单位”的数量。对于 ASCII 文本,它将计算字符数。对于任意 Unicode 文本,它是...复杂。有关丑陋的细节,请参阅 BeeOnRope 的答案。string.length

答:

9赞 Andy Thomas 4/29/2013 #1

该方法以字符为单位返回字符串的长度。length()

字符可能占用多个字节。该表达式使用平台的默认字符集返回字符串的长度(以字节为单位)。String.getBytes().length

评论

1赞 Bu Saeed 11/20/2021
我想没有这样的方法.getLength()String.getBytes().length
2赞 FreeNickname 4/29/2013 #2

该方法返回字符串中的符号数量。While 返回用于存储这些符号的字节数。 通常,字符以 UTF-16 编码存储。因此,存储一个字符需要 2 个字节。 看看这个 SO 答案String.length()String.getBytes().length()

49赞 BeeOnRope 4/29/2013 #3

字符串.length()

String.length()是表示字符串所需的 16 位 UTF-16 代码单元数。也就是说,它是用于表示字符串的值数,因此也等于 。对于西方语言中使用的大多数字符,这通常与字符串中的 unicode 字符(码位)数相同,但如果使用任何 UTF-16 代理项对,则码位数将小于代码单元数。这种对只需要对 BMP 之外的字符进行编码,并且在大多数写作中很少使用(表情符号是一个常见的例外)。chartoCharArray().length

String.getBytes().length

String.getBytes().length另一方面,是在平台的默认编码中表示字符串所需的字节数。例如,如果默认编码是 UTF-16(罕见),则它将恰好是返回值的 2 倍(因为每个 16 位代码单元需要 2 个字节来表示)。更常见的是,您的平台编码将是多字节编码,如 UTF-8。String.length()

这意味着这两个长度之间的关系更加复杂。对于 ASCII 字符串,这两个调用几乎总是会生成相同的结果(除了不以 1 字节对 ASCII 子集进行编码的异常默认编码)。在 ASCII 字符串之外,可能会更长,因为它计算表示字符串所需的字节数,而计算 2 字节代码单元。String.getBytes().lengthlength()

哪个更合适?

通常,您将与其他字符串方法一起使用,这些方法将偏移量带入字符串。例如,要获得最后一个字符,您可以使用 .由于某种原因,您只能使用 if 来处理 返回的字节数组编码。String.length()str.charAt(str.length()-1)getBytes().lengthgetBytes

2赞 PixelsTech 4/14/2015 #4

简而言之,返回字符串中的字符数,而 .length 返回使用指定编码表示字符串中字符的字节数。String.length()String.getBytes()

在许多情况下,将具有与 相同的值。但是在编码 UTF-8 并且字符的值超过 127 的情况下,将与 . 下面是一个示例,它解释了在调用 时字符串中的字符如何转换为字节。这应该让您了解 和 之间的区别。String.length()String.getBytes().lengthString.length()String.getBytes().lengthString.getBytes()String.length()String.getBytes().length