for循环造对象,造了很多重复的s对象,为什么不报错?

https://img3.mukewang.com/5cbfc9810001464f03300104.jpg

眼眸繁星
浏览 590回答 6
6回答

繁华开满天机

// 循环执行 10 次,会产生 10个 {} 代码块,互不冲突for (int i = 0;i < 10;i ++) { // ↓&nbsp; &nbsp; 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.这段代码会被编译器优化,结果我猜可能是&nbsp;int s = 9;这样的形式,你可以javap一下看看

ITMISS

int何来的对象,只不过不断改变栈的值而已
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java