关于foreach的使用

      当然首先要说明一点,Java的foreach也是用for来实现的,之所以说foreach是为了与传统的for循环区分开。
      在我做《JAVA编程思想》访问控制这一章习题8的时候,用到了这样的语句:

      当然,不是我想出来的,借鉴了别人的做法(或者说抄袭吧,:))。当时也没细想,运行时才发现不对,因为ca[i](0<=i<3)始终是null。Why? Oh~,上面的语句相当于这样:

其中并没有对ca[index]的赋值操作。是不是这样?验证一下吧

结果
before foreach:
ma: [null, null, null]
in foreach:
x: MyClass@c17164
x: MyClass@1fb8ee3
x: MyClass@61de33
after foreach:
ma: [null, null, null]

 

看来的确不假啊,虽然x被赋值,但ma本身并没有。由此得出(以数组为例,对于其它数据结构相同):
1. 基本类型:如果你想用foreach获取数组每个元素的值,OK,do it!

结果:
ia: [1, 2, 3, 4, 5]
in foreach:
x: 1
x: 2
x: 3
x: 4
x: 5

 

2.基本类型:如果你想用foreach来初始化或重新更改元素的值,No way!

结果:
before foreach:
ia: [0, 0, 0, 0, 0]
in foreach:
x: 5
x: 5
x: 5
x: 5
x: 5
after foreach:
ia: [0, 0, 0, 0, 0]

 

3. 对象:与基本类型类似,可以用foreach获取每个对象,但不能用来初始化或者改变数组元素(是对象引用而不是对象本身)。前面有初始化的例子,看个已经初始化的数组吧

结果:
before foreach:
ma: [MyClass@c17164, MyClass@1fb8ee3, MyClass@61de33]
in foreach:
x: MyClass@14318bb
x: MyClass@ca0b6
x: MyClass@10b30a7
after foreach:
ma: [MyClass@c17164, MyClass@1fb8ee3, MyClass@61de33]
之所以打出类名和对象地址,就是为了看看引用本身。

 

4.如果想改变数组中引用所指向的对象的内容,No problem, just do it! 这无非又是一个关于对象引用和对象本身的问题。

 


结果:
before foreach:
ma: [1, 2, 3]
in foreach:
x: 5
x: 5
x: 5
after foreach:
ma: [5, 5, 5]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值