java foreach中修改元素变量会产生的影响

foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
网上对foreach的大量例子中,都是在方法体中直接将x通过println输出,我便尝试在方法体中对元素变量x作出修改,看看会产生怎样的影响。
首先定义一个Dto:

public class UserDto {
private String msg;
private int id;
public String getMsg() {
	return msg;
}
public void setMsg(String msg) {
	this.msg = msg;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
} 	
}

然后是测试方法

public class foreacheAction {
public static void main(String[] args) {
	UserDto user1=new UserDto()	;
	List<UserDto> testList=new ArrayList<UserDto>();
	user1.setMsg("msg");
	user1.setId(0);
	testList.add(user1);
	for(UserDto user:testList) {
		user.setMsg("new");
		user.setId(999);
	}
		System.out.println("user1.msg:"+user1.getMsg()+"\ntestList.getmsg:"+testList.get(0).getMsg());
        System.out.println("user1.id:"+user1.getId()+"\ntestList.getid:"+testList.get(0).getId());
}
}

最后是输出结果

user1.msg:new
testList.getmsg:new
user1.id:999
testList.getid:999

可以看到,仅通过对元素变量的修改,不仅对遍历对象中的元素产生了修改,而且还对存入遍历对象前的变量值产生了修改。最开始我只用了String型的变量进行测试,看到结果猜想是user1,testList.get(0)还有user中存的地址不同,但都指向了堆中同一区域,而修改的则是堆中的数据,但后来用int型数据进行测试后,发现结果与String型一致。原因还没有查清楚。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值