关于foreach遍历数组时,无法赋值的问题

wangcwang 2017-04-16 06:05:39
int a=2;int b=a;b=1;我们先来看看这个,大家可以想想a的值会变成1吗?不会,因为int是基本数据类型,是值的传递,所以a不会变化,那我们再来看看int【】c={1,2};for(int i:c){i=3};可以理解成int i=c【0】;i=3;所以c【0】的值不会发生变化,如果是引用数据类型,情况不一样了,因为是地址的传递。
...全文
1562 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haha001565 2017-04-17
  • 打赏
  • 举报
回复
楼主想辩论这个问题 用普通for更有说服力 高级for底层是迭代器 改不了值
lxyscls 2017-04-17
  • 打赏
  • 举报
回复
我去,我发现我提了个同样问题,回答得也是楼上两位 使用for each分配object array的问题 不过话说您也忒小气了,才给20分 但是楼上说foreach底层就是Iterator的明显只说对了一半啊,array就没有支持Iterable<T>接口这一说
引用
public interface Iterable<T> Implementing this interface allows an object to be the target of the "for-each loop" statement. See For-each Loop
标准答案还是看JLS吧 14.14.2. The enhanced for statement
for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier =
        (TargetType) #i.next();
    Statement
}
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}
都是先赋值给一个临时变量,再在其上操作,所以你赋值不起作用
MikeDDT009 2017-04-16
  • 打赏
  • 举报
回复
特别是你将forech写法转换成相同功能的for一般写法你就能知道具体差别了
MikeDDT009 2017-04-16
  • 打赏
  • 举报
回复
foreach只适合遍历输出,要想玩赋值就老实的用一般的写法

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧