为什么不是相同的数组,当被认为是相同的字符串传递?

时间:2014-02-12 22:59:41

标签: java arrays

1)如果我设置

int[] set1 = new int[]{1, 2};
int[] set2 = new int[]{1, 2};

当我使用

将它们作为字符串传递时
System.out.println(Arrays.toString(set1) == Arrays.toString(set2));

它返回false?

2)有没有办法比较整个数组的相等性而不循环遍历数组的每个索引?

3 个答案:

答案 0 :(得分:9)

  1. String s为Object s,因此应使用equals进行比较:

    System.out.println(Arrays.toString(set1).equals(Arrays.toString(set2))); //prints true
    
  2. 使用Arrays#equals来比较数组,请注意,数组必须具有相同的长度且项目必须等于:==表示基元(int,{{1} } ...)和long equals个引用。)

答案 1 :(得分:4)

  1. ==比较字符串引用,而非值。使用str1.equals(str2)。 (关于这个here的更多信息;它基本上比较实际对象是否相同,而不是字符串内容)

  2. 不,自然如果你想知道每个元素是否相同,你必须遍历所有元素。 Arrays#toString在幕后也会这样做(如何获得字符串表示?)。

  3. 旁注:将数组转换为字符串会引入大量不必要的开销(字符串操作等)。你应该只是循环并比较元素,或创建一个辅助方法(或使用像Arrays#equals这样的内置方法。)

答案 2 :(得分:2)

使用Arrays.equals比较数组,并查看this进行字符串比较。