我正在学习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);
}
}
提前致谢!
答案 0 :(得分:31)
使用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
答案 1 :(得分:1)
没有。 ==
仅比较数值(或布尔值)值或引用。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
您可能正在寻找Arrays.equals (a,b)
方法
答案 2 :(得分: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