Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Java中的整数数组。为什么不工作?_Java_Comparison_Compare - Fatal编程技术网

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

比较Java中的整数数组。为什么不工作?,java,comparison,compare,Java,Comparison,Compare,我在学习Java,刚刚想到了一个关于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);

我在学习Java,刚刚想到了一个关于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);
    }

}
提前谢谢

使用)方法

=
操作符只是检查两个引用是否指向同一个对象

测试:

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

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


如果对
对象使用
=
运算符,则可能正在查找
数组.equals(a,b)
方法


如果对基本类型(
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)
方法。

否,因为
==
比较引用,而不是值。其他人已经回答了这个问题,但我要补充一点,在Java或任何以对象或结构作为引用的语言中,理解这一点非常重要。如前所述,您正在创建两个单独的对象,其中恰好有相同的数字。如果您写了“int[]b=a;”,那么b将指向与a相同的内存,那么a==b将是真的。@jfrank这有点太泛化了。例如,C#和python确实有对象作为引用,但
=
仍然会给出正确的结果(至少对于python来说,C#有它自己的缺点)。我并不是有意暗示==在每种语言中的引用行为都是一样的,所以如果结果是这样的话,那我就不好了。我的意思是强调理解引用和记忆概念的重要性,以便用这些语言成功地编程。IMHO==运算符没有“正确”的行为,因为当您有引用时,相等是一个微妙的概念。如果你不理解引用,你就没有机会正确理解不同类型的等式。如何在不使用循环的情况下找到difrence?