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