回 帖 发 新 帖 刷新版面

主题:关于String的奇怪问题

直接看程序:


byte tmp[] = new byte[5];
new Random().nextBytes(tmp);
String request = new String(tmp);
String response = (String)A.process(request); // process() 返回的确实是 String 的实例

System.out.println(request.equals(response)); // 输出是 false


但是 request.getBytes() 和 response.getBytes() 分别得到的byte数组却是完全一样的

既然byte数组是一样的,为什么两个String不等??[em18][em18]

回复列表 (共2个回复)

沙发

阅读String的源文件会发现,equals是纯比较String内部储存的byte,getByte的过程中,用到了Charset相关的东西来复制byte,大概有可能和String内部的byte不同。所以我猜可能是两个String内部的byte[]不同,charset也不同,但是它们复制出来的byte[]正好相同了,这时候用equals比较的内部byte[]依然是不同的。当然,只是猜测的,要看全部程序才容易弄清楚原因。

板凳

谢谢你的解答,不过这种解释似乎不太成立。

我当时也怀疑过和charset有关,但是又考虑到既然调用的是getBytes没有参数的方法,就是用本地的默认charset,而不论用Random产生多长的byte[](比如10000),返回的各个byte都完全相同,这就应该排除了两个charset转出来的byte[]碰巧相同的可能。

我来回复

您尚未登录,请登录后再回复。点此登录或注册