8

我正在学习 Java,只是想出了一个关于该语言的微妙事实:如果我声明两个具有相同元素的整数数组并使用==结果比较它们是false. 为什么会这样?比较不应该评估为true吗?

public class Why {

    public static void main(String[] args) {
        int[] a = {1, 2, 3};
        int[] b = {1, 2, 3};

        System.out.println(a == b);
    }

}

提前致谢!

4

3 回答 3

34

使用Arrays.equals(arr1, arr2 ) 方法。

== 运算符只检查两个引用是否指向同一个对象。

测试:

int[] a = {1, 2, 3};
int[] b = a;    
System.out.println(a == b);   // returns true as b and a refer to the same array  

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b));   //returns true as a and b are meaningfully equal
于 2013-01-30T22:19:54.533 回答
1

No.==仅比较数字(或布尔)值或引用。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21

您可能正在寻找Arrays.equals (a,b)方法

于 2013-01-30T22:24:17.183 回答
0

如果您使用==运算符与Object您比较引用,而不是
如果您将==运算符与原始类型 ( int, long, boolean...) 一起使用,则您正在检查它们是否具有相同的值。

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};

System.out.println(a == b); //return false;

System.out.println(a[0] == b[0]); //return true;



String[] a1 = {"Cat", "Dog", "Mouse"};
String[] b2 = {"Cat", "Dog", "Mouse"};

System.out.println(a1 == b1); //return false;

System.out.println(a1[0] == b1[0]); //return false; Because String are Object

您可以使用该Arrays.equals(array1, array2)方法。

于 2013-01-31T00:07:33.873 回答