6 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
// 循环执行 10 次,会产生 10个 {} 代码块,互不冲突
for (int i = 0;i < 10;i ++) { // ↓
int s = i; // 中间这一部分是 s 的作用域,出了作用域 s 是不存在的
} // ↑
一只甜甜圈
TA贡献1836条经验 获得超5个赞
首先s是int类型,属于基本类型,不是Object类型,因此不存在“创建很多重复的s对象”之说
这里创建的是int类型的变量,这个变量是存在栈里的
即使你把循环次数设置成Integer.MAX_VALUE,也不会报错,具体原因不知道,不过编译器会优化代码,使得实际上每次使用的都是同一块内存区域,而不是每次都开辟一块新的内存区域
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
1、首先你要理解的是这里并没有一个名叫s的对象,代码中的s,以及i,只不过是对象的引用,相当于C语言中的指针,它只是指向这个对象空间的一个标志。
2、你的每次的for循环,都在声明一个同名的引用,那么这时候编译器是能够分辨出来这些同名的引用的,所以无论循环多少次,实际上你只拥有一个名叫‘s’的引用。而且它初始化在第一次for循环,以后的每次循环都是在给这个同名的引用赋值。
3、如果想看打印结果,把system.out放到局部变量的有效域内。
蓝山帝景
TA贡献1843条经验 获得超7个赞
1.这段代码没造对象,int是基本数据类型,不是对象。
2.这段代码会被编译器优化,结果我猜可能是 int s = 9;
这样的形式,你可以javap一下看看
添加回答
举报
0/150
提交
取消