我是Java编程的初学者和自学者。所以,我想知道JavaString.length()
和String.getBytes().length
Java之间的区别。
什么更适合检查字符串的长度?
String.length()
是表示字符串所需的 16 位UTF-16 代码单元的数量。也就是说,它是char
用于表示字符串的值的数量,因此也等于toCharArray().length
。对于西方语言中使用的大多数字符,这通常与字符串中的 unicode 字符(代码点)的数量相同,但如果使用任何 UTF-16代理对,代码点的数量将小于代码单元的数量. 此类对仅用于对BMP之外的字符进行编码,并且在大多数写作中很少使用(表情符号是一个常见的例外)。
String.getBytes().length
另一方面是在平台的默认编码中表示您的字符串所需的字节数。例如,如果默认编码是 UTF-16(很少见),那么它将正好是返回值的String.length()
2 倍(因为每个 16 位代码单元需要 2 个字节来表示)。更常见的是,您的平台编码将是多字节编码,如 UTF-8。
这意味着这两个长度之间的关系更加复杂。对于 ASCII 字符串,这两个调用几乎总是会产生相同的结果(除了不将 ASCII 子集编码为 1 个字节的异常默认编码之外)。在 ASCII 字符串之外,String.getBytes().length
可能更长,因为它计算表示字符串所需的字节数,同时length()
计算 2 字节代码单元。
通常,您将String.length()
与其他将偏移量带入字符串的字符串方法一起使用。例如,要获取最后一个字符,您可以使用str.charAt(str.length()-1)
. 您只使用getBytes().length
if 出于某种原因您正在处理由getBytes
.
该length()
方法以字符为单位返回字符串的长度。
字符可能占用多个字节。该表达式String.getBytes().length
使用平台的默认字符集返回字符串的长度(以字节为单位)。
该String.length()
方法返回字符串中符号的数量。WhileString.getBytes().length()
返回用于存储这些符号的字节数。通常,字符以 UTF-16 编码存储。所以存储一个字符需要 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
。