字符串比较,居然暗藏玄机(没收获你锤我)
面试编程基本功的时候,很常见的一个题目是: 判断两个字符串是否完全相同? 画外音:先别急着退,没收获你锤我。 很多同学能够很快的写出对应的代码: public static boolean isEqual(byte[] a, byte[] b) { // 先判断长度是否相同 if (a.length != b.length) { // 长度不同,返回false return false; } // 一个一个字符,循环遍历判断 for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) { // 只要一个字符不同,返回false return false; } } // 全部字符相同,返回true return true; } 代码没有问题,甚至JDK底层,也是这么实现的。 然而,MessageDigest.isEqual却被报了bug,并在JDK 1.6.0_17中被fix成了以下的版本: public static boolean isEqual(byte[] a, byte[] b) { // 先判断长度是否相同 if (a.length != b.length) { // 长度不同,返回false return false; } // 返回结果初始化 int result = 0; // 一个一个字符,循环遍历判断 for