用for循环new出新的对象在内存中是怎么工作的

a34020249 2010-10-18 04:49:30
如下这个代码new出了10个k为什么没有说重复定义啊 ,要是Kit k = new Kit(); Kit k = new Kit();这样连写两个就会说重复定义的,哪位大侠和我讲讲下面的程序在内存中是怎么工作的怎么分配内存的。

public class KitCircle1 {
public static void main(String[] args){
for(int i=0; i<10 ;i++) {
Kit k = new Kit();
}
}
}

class Kit {
int id;
}
...全文
518 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangmengmeng2012 2011-11-06
  • 打赏
  • 举报
回复
这么久的问题了?我想请问下,for循环里每次new的对象,一次循环结束就释放内存吗?哪位大虾帮忙解答一下!
a34020249 2010-10-19
  • 打赏
  • 举报
回复
我太谢谢阿宝了,我看了阿宝的那句话我一下顿悟了。

不过也谢谢大家的回答
无伤 2010-10-18
  • 打赏
  • 举报
回复
Kit k = new Kit();
k的生命周期就是在当前循环内。 所以不会出现重复定义。
eggno8 2010-10-18
  • 打赏
  • 举报
回复

public static void main(String[] args) {
for(int i=0; i<10 ;i++) {
int x = 1;
}
//int i = 1;
//int i = 1;//这两个连续定义就要报错,因为在同一作用域
}

你的问题应该是
“for循环中定义的变量作用域到什么范围”,跟对象内存什么的无关
qybao 2010-10-18
  • 打赏
  • 举报
回复
k的作用域是在for的花括号里{}
一次循环结束,走到花括号的}时,k就生命结束了
下次进入循环,从新进入花括号,重新生成一个k
LZ可以试试这样的代码
for(int i=0; i<10 ;i++) {
{Kit k = new Kit();} //放到一个花括号里
Kit k = new Kit(); //这样是不会有问题的,但是把上下两句换个位置就有问题了,没有花括号的那句换到上面的话,因为它的的生命周期在for的花括号里,这样就造成带花括号的那句重复定义了
}
凉岑玉 2010-10-18
  • 打赏
  • 举报
回复
图片发送失败··悲剧啊··
还是说吧··每次new出来的都是新东西··只是k都是旧东西··它只不过是一个引用··我们没创建一个新的对系那个出来·其实只是改变了k的引用而已··也就是k指向的对象··
凉岑玉 2010-10-18
  • 打赏
  • 举报
回复
blazingfire 2010-10-18
  • 打赏
  • 举报
回复
new 出来的对象没有什么作用域的说法。作用域是针对变量而言的。

在你那个10次循环中,每次都创建的对象都被你循环作用域变量 k引用
a34020249 2010-10-18
  • 打赏
  • 举报
回复
谢谢大家,回答。可是那10个新new出来的k不是都在for循环这个作用域中吗 ?
gujinf2008 2010-10-18
  • 打赏
  • 举报
回复
对豪,关注中。。。。
closewbq 2010-10-18
  • 打赏
  • 举报
回复
呵呵!
Kit k = new Kit();在循环中就是创建了10个对象,在内存中开辟了10个地址。只不过,在每次循环的过程中,都是一个k对象都指向了一个新的地址。

而你创建两个 Kit k = new Kit(); Kit k = new Kit();。根本就是两码事。这首先不符合java规范的,这就重名了,没有什么可研究的。
soli11722984 2010-10-18
  • 打赏
  • 举报
回复
{}作用范围………………

62,614

社区成员

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

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