循环里定义变量的问题

想到一个问题,在for或者while循环里面定义一个变量,这样是不是会每执行一次都申请一次内存?是不是应该把声明放在外面,初始化放在里面?


1

这个问题涉及到数据类型。int是基本数据类型,保存在stack,String等是引用数据类型,保存在heap。在网上查到一些二手知识:

两种数据类型的特点:
一、从概念方面来说
基本数据类型:变量名指向具体的数值
引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值
二、从内存构建方面来说
基本数据类型:变量在声明之后java就会立刻分配给他内存空间
引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
三、从使用方面来说
基本数据类型:使用时需要赋具体值,判断时使用“==”号
引用数据类型:使用时可以赋null,判断时使用equals方法

另外:


2

3

回答开始的问题,在循环里定义和初始化数据会不会重复申请内存,答案是不会,因为编译器会把它优化到外面。
就是 for(){ int x = ...}会优化为 int x; for() { x = ...}
另外方法里的所有临时变量 都是在方法退出后再释放掉,就是一次性全部出栈。

例如,对于:


63C718325A5B823E4ADBAB8EAD80C1AD.png

使用下面的命令可以得到字节码。

javap -verbose xxx.class > xx.txt

得到:


22CB076E05D9B2A81F57D63EAE5C0DC7.png

三个localVariable分别是:

FC62F15BB7B98472E223AC20828E6994.png

See:https://zhidao.baidu.com/question/415203140.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,239评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,475评论 11 349
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,745评论 0 6
  • 你问我 为什么 喜欢去咖啡馆 我说 喜欢的不是去咖啡馆 是回忆与你初次邂逅的地点 你问我 为什么 喜欢骑单车 我说...
    齐欢欢阅读 9,919评论 422 461
  • 一个人的旅行
    44fc80e12448阅读 1,651评论 0 0