首页 新闻 会员 周边 捐助

for循环创建对象

0
悬赏园豆:5 [已解决问题] 解决于 2023-11-17 21:18


为什么在for循环里面可以循环创建多个同名对象,在外面不能创建同名对象
求详细解答!!!

戈壁老王-的主页 戈壁老王- | 初学一级 | 园豆:188
提问于:2023-11-09 20:31

这确实是一个很初级的问题。涉及到不同的作用域。案例中for循环内部与外部是不同的作用域。外部s1属于同名变量。但是你想让他们指向不同的内存地址,这是不合理的。而for内部属于每次新建一个变量从新负值。是安全的。合理的。

CallMeEureka 1年前

@CallMeEureka: 感谢解答

戈壁老王- 1年前
< >
分享
最佳答案
0

作用域问题,每个作用域都有自己单独的存储空间,存储空间分栈和域,栈必须唯一。你给的案例中,s1存在栈里面,new students分配了空间存在域里面。
单次循环是一个作用域,for循环外面又是一个作用域。

收获园豆:5
TenFly | 初学一级 |园豆:69 | 2023-11-10 11:48

感谢解答

戈壁老王- | 园豆:188 (初学一级) | 2023-11-17 21:16
其他回答(2)
0

应该是与访问权限有关,你可以搜一下 成员变量和局部变量,static和非static等等的区别。 当for循环里的s创建之后也是只有在{}里面才能访问的到,当你第二次循环已经出了{},再次进入{}相当于一个新对象了。

三号小玩家 | 园豆:116 (初学一级) | 2023-11-09 22:18

但是循环Arraylist却能累计

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-09 23:25

感谢解答

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-17 21:14
2

关键词变量作用域

你给的代码for里也并没有创建同名对象

for() {
  students s = new students();
  students s = new students();
}

才等价于你下面的2个 students s1 = new students();

复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-11-10 08:58

作用域的问题嘛?

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-10 09:43

@戈壁老王-: 是的 {}就是一个代码块,一个代码块内不能重复,所谓的for循环在循环到第2次时已经是新的代码块了。你的代码循环3次就好比

{
  students s = new students();
}
{
  students s = new students();
}
{
  students s = new students();
}
支持(0) 反对(0) 复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-11-10 09:49

@复制粘贴机器人: 还有个问题,ArrayList对象的变量在循环里面为什么可以累加啊?

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-10 09:51

@戈壁老王-: 你的意思是在for循环中add(s)?

支持(0) 反对(0) 复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-11-10 09:55

@复制粘贴机器人: 是的,还是说不是变量类型ArrayList的功能,是这个add方法的功能?

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-10 09:57

@戈壁老王-: 都无关。就相当于

{
  students s = new students();
  list.add(s);
}
{
  students s = new students();
  list.add(s);
}
{
  students s = new students();
  list.add(s);
}
支持(0) 反对(0) 复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-11-10 10:11

@复制粘贴机器人:
但是我每次循环都给s对象成员变量赋值了,最后数组是个3个对象而不是1个

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-10 11:05

@戈壁老王-: 我上面不是给代码了么,就相当于那段代码的效果。3个代码块,每个代码块里新定义了一个s,并把s加入到数组里去

支持(0) 反对(0) 复制粘贴机器人 | 园豆:720 (小虾三级) | 2023-11-10 11:07

@复制粘贴机器人: 感谢解答

支持(0) 反对(0) 戈壁老王- | 园豆:188 (初学一级) | 2023-11-17 21:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册