比较Java中的整数数组。为什么不= =工作?

时间:2021-05-20 12:15:01

I'm learning Java and just came up with this subtle fact about the language: if I declare two integer Arrays with the same elements and compare them using == the result is false. Why does this happen? Should not the comparison evaluate to true?

我正在学习Java并且刚刚提出了关于该语言的这个微妙的事实:如果我声明两个具有相同元素的整数数组并使用==进行比较,则结果为false。为什么会这样?比较评估不应该是真的吗?

public class Why {

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

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

}

Thanks in advance!

提前致谢!

3 个解决方案

#1


30  

use Arrays.equals(arr1, arr2) method. == operator just checks if two references point to the same object.

使用Arrays.equals(arr1,arr2)方法。 ==运算符只检查两个引用是否指向同一个对象。

Test:

测试:

       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

#2


1  

No. ==compares numerical (or boolean) values, or references, only.

编号==仅比较数值(或布尔)值或引用。

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

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

You're probably looking for the Arrays.equals (a,b) method

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

#3


0  

If you use == operator with Object you are checking if two references point to the same object. If you use == operator with primitive types (int, long, boolean...) you are cheking if they have same values.

如果对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

#1


30  

use Arrays.equals(arr1, arr2) method. == operator just checks if two references point to the same object.

使用Arrays.equals(arr1,arr2)方法。 ==运算符只检查两个引用是否指向同一个对象。

Test:

测试:

       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

#2


1  

No. ==compares numerical (or boolean) values, or references, only.

编号==仅比较数值(或布尔)值或引用。

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

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

You're probably looking for the Arrays.equals (a,b) method

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

#3


0  

If you use == operator with Object you are checking if two references point to the same object. If you use == operator with primitive types (int, long, boolean...) you are cheking if they have same values.

如果对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