Java数组及判断相等疑惑剖析

 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,很多不太明白,希望把自己的疑惑剖析出来,认真搞明白。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值