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

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

什么更适合检查字符串的长度?

string.length减()

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

String.getBytes()。长度

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

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

哪个更合适?

通常,您将使用String.length()与其他字符串方法一起使用,这些方法将偏移量转换为字符串。 例如,要获取最后一个字符,您将使用str.charAt(str.length()-1) 。 如果由于某种原因你正在处理getBytes返回的字节数组编码,你只能使用getBytes().length

length()方法以字符forms返回字符串的长度。

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

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

我希望它会有所帮助:)

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

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