public static void main(String[] arg) {
int[] b = new int[] {1,2,3,4,5};
int[] c = {1,2,3,4,5};
int[] w = {2,1,2,1,2};
System.out.println(w==b);
w = b;
System.out.println(w==b);
int[] d = new int[5];
d = b;
int[] D = c;
int[] e = b;
int[] E = c;
System.out.println(b==c);
System.out.println(d==b);
System.out.println(D==c);
System.out.println(e==b);
System.out.println(E==c);
c[0] = 10;
System.out.println(D[0]);
System.out.println(E[0]);
int[] q = new int[b.length];
for(int i=0;i<b.length;i++)
q[i]=b[i];
System.out.println(q==b);
}
结果:
false
true
false
true
true
true
true
10
10
false
如上所示,第一步创建三个数组,三个数组的长度都为5,首先验证b与c是否相等,很显然不相等,w与c也是一样;接着将b赋给w,输出显示true,可以理解为w获得了b的管理权限,或者获得了b的地址方便理解。
同样操作,创建数组d,不赋初值。b与c是两个数组,值相同,但管理权限不同,或者说地址不同,所以为false。d与b,D与c,e与b,E与c同理,bc两种方式的数组,但是在赋值的过程中均把地址赋给新的对象,所以输出结果为true。
同时,对于数组的管理者来说,将c[0]赋值,但是在输出结果中可以看出,D[0],E[0]同样变化,由此可以看出他们管理着同一个数组。
最后再换一种方式,创建新的数组,按照遍历的方式将b中的值赋给新对象,结果为false,可以看出只是值相等,而管理权限或者地址不同。
以上判断可用equals方式判断值相同。
初识java,很多不太明白,希望把自己的疑惑剖析出来,认真搞明白。