比较Java中的整数数组。为什么不工作?
我在学习Java,刚刚想到了一个关于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);
=
比较它们,结果是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?