如何在没有java utils的情况下比较两个字符串数组

检查数组arr1是否在java中以相同的顺序包含与arr2相同的元素。

例如:

isTheSame({"1", "2", "3"}, {"1", "2", "3"}) → true isTheSame({"1", "2", "3"}, {"2", "1", "1"}) → false isTheSame({"1", "2", "3"}, {"3", "1", "2"}) → false 

到目前为止我有

 public boolean isTheSame(String[] arr1, String[] arr2) { if (arr1.length == arr2.length) { for (int i = 0; i < arr1.length; i++) { if (arr1[i] == arr2[i]) { return true; } } } return false; } 

这个问题是它只比较两个数组的第一个元素。

你正在迭代,直到找到匹配。 你应该寻找一个不匹配的字符串,你应该使用equals not ==

 // same as Arrays.equals() public boolean isTheSame(String[] arr1, String[] arr2) { if (arr1.length != arr2.length) return false; for (int i = 0; i < arr1.length; i++) if (!arr1[i].equals(arr2[i])) return false; return true; } 

FYI这是Arrays.equals所做的,因为它也处理null值。

 public static boolean equals(Object[] a, Object[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i 
 public boolean isTheSame(String[] arr1, String[] arr2) { if (arr1.length == arr2.length) { for (int i = 0; i < arr1.length; i++) { if ((arr1[i] != null && arr2[i] != null && !arr1[i].equals(arr2[i])) || (arr1[i] != null && arr2[i] == null) || (arr2[i] != null && arr1[i] == null)) { return false; } } } else { return false; } return true; } 

但这是非常不理想的。

是的,它只会比较第一个元素。 看看它在做什么:

 public boolean isTheSame(String[] arr1, String[] arr2) { if (arr1.length == arr2.length) { for (int i = 0; i < arr1.length; i++) { // if the elements are equal .. // (NOTE: this will only be true for INTERNED strings!!) if (arr1[i] == arr2[i]) // fixed typo { // .. then STOP LOOKING and RETURN TRUE // wait- WHY? return true; } } // searched everything- but still RETURN FALSE?? } return false; } 

虽然由于字符串实习而使用==不是所提供的示例数据的问题,但有一天它咬你的实际数据。 除非需要标识相同 ,否则不要对对象使用==