tostring和getbytes不能一起使用
问题
a.equals(a.getBytes().toString()为什么是false
解答
a.equals(a.getBytes().toString()) 这一表达式返回 false
的原因是 equals()
方法在比较字符串时,不仅比较字符本身,还会比较两个字符串的内部表示,包括它们在内存中的地址和字节编码。
a.getBytes()
:这一部分将字符串a
转换为一个字节数组。默认情况下,它会使用系统的默认字符集(例如 UTF-8)来转换字符串。.toString()
:这一部分将字节数组转换为一个字符串。在 Java 中,字节数组默认使用[B
格式化为字符串。a.equals(...)
:这一部分使用equals()
方法比较两个字符串。在比较时,它不仅会比较字符串的字符内容,还会比较它们的内部表示,包括它们在内存中的地址和字节编码。
由于 a.getBytes()
和 a.toString()
的行为是不同的,所以它们产生的结果也是不同的。具体来说,a.getBytes()
返回的是根据默认字符集编码的字节数组,而 a.toString()
返回的是字节数组的默认表示(即 [B
)。因此,即使这两个操作的结果在视觉上看起来相同,它们实际上并不相等。
要使表达式 a.equals(a.getBytes().toString())
返回 true
,你需要使用与 getBytes()
相同的方式来转换字符串:
这样,b
就会使用与 a.getBytes()
相同的字符集来从字节数组转换回字符串,从而使得 a.equals(b)
返回 true
。