tostring和getbytes不能一起使用

问题

a.equals(a.getBytes().toString()为什么是false

解答

a.equals(a.getBytes().toString()) 这一表达式返回 false 的原因是 equals() 方法在比较字符串时,不仅比较字符本身,还会比较两个字符串的内部表示,包括它们在内存中的地址和字节编码。

  1. a.getBytes():这一部分将字符串 a 转换为一个字节数组。默认情况下,它会使用系统的默认字符集(例如 UTF-8)来转换字符串。
  2. .toString():这一部分将字节数组转换为一个字符串。在 Java 中,字节数组默认使用 [B 格式化为字符串。
  3. a.equals(...):这一部分使用 equals() 方法比较两个字符串。在比较时,它不仅会比较字符串的字符内容,还会比较它们的内部表示,包括它们在内存中的地址和字节编码。

由于 a.getBytes()a.toString() 的行为是不同的,所以它们产生的结果也是不同的。具体来说,a.getBytes() 返回的是根据默认字符集编码的字节数组,而 a.toString() 返回的是字节数组的默认表示(即 [B)。因此,即使这两个操作的结果在视觉上看起来相同,它们实际上并不相等。

要使表达式 a.equals(a.getBytes().toString()) 返回 true,你需要使用与 getBytes() 相同的方式来转换字符串:

1
2
String b = new String(a.getBytes());  
boolean result = a.equals(b);

这样,b 就会使用与 a.getBytes() 相同的字符集来从字节数组转换回字符串,从而使得 a.equals(b) 返回 true