"Java中的基本数据类型一定存储在栈中的吗?”

这句话肯定是错误的。

对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量,

局部变量中基础数据类型的引用和值都存储在栈中,对象引用存在栈中,栈内存中的局部变量随着方法的消失而消失。

对象存在堆中。 成员变量存储在堆中的对象里面,由垃圾回收器负责回收。

在方法内的局部变量是基本数据类型的话那么运行时存储在栈stack(java虚拟机栈)中,若是对象,则引用分配在内存栈stack(java虚拟机栈)中,对象实例分配到堆内,

类的成员变量 ,无论是基本类型还是其它类型,因为整个实例对象都被分配到堆heap中,因此成员变量也在堆heap类了

如以下代码:

class BirthDate {private int day;private int month;private int year;public BirthDate(int d, int m, int y) {day = d;month = m;year = y;}// 省略get,set方法………
}public class Test {public static void main(String args[]) {int date = 9;Test test = new Test();test.change(date);BirthDate d1 = new BirthDate(7, 7, 1970);}public void change(int i) {i = 1234;}
}

对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

1.main方法开始执行:int date = 9; date局部变量,基础类型,引用和值都存在栈中。

2.Test test = new Test();test为对象引用,存在栈中,对象(new Test())存在堆中。

3.test.change(date); i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。

4.BirthDate d1= new BirthDate(7,7,1970); d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。

5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(), new BirthDate()将等待垃圾回收。

Java中成员变量和局部变量在内存中的分配相关推荐

  1. java静态局部变量_java中成员变量,局部变量,静态变量的辨析

    转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...

  2. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...

  3. Java面向对象05:创建对象的内存分析成员变量和局部变量的内存分析

    一.创建对象内存分析 代码 public class Pet {//宠物类//类的属性public String name;//宠物名public int age ; //宠物年龄public Str ...

  4. [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

    引言 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接 ...

  5. 【零基础学Java】—成员变量和局部变量(九)

    [零基础学Java]-成员变量和局部变量(九)

  6. java 线程---成员变量与局部变量

    关于成员变量与局部变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程) . 如果一个变量是局 ...

  7. 别翻了,成员变量和局部变量在多线程中的使用,看这篇就够了

    一. 成员变量和局部变量的区别 在类中的位置不同 成员变量:在类中方法外面 局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中) 在内存中的位置不同 成员变量:在堆中(方法区中静态区),成 ...

  8. Java基础--成员变量和局部变量(区别、重名问题)

    成员变量和局部变量 注:所有的变量没有赋值是不能使用的!!! 两者的区别:定义的位置不同:成员变量:定义在类中成员位置的变量,称为实例变量 / 类变量,在类中方法外局部变量:定义在类中方法中作用范围不 ...

  9. java 实例变量是类的成员变量吗_JAVA中成员变量,局部变量,实例变量,类变量,有什么关系,,?...

    展开全部 java易混淆概念之类变量32313133353236313431303231363533e4b893e5b19e31333365643662.实例变量.局部变量 类变量.实例变量.局部变量 ...

  10. Java全局变量(成员变量)和局部变量的区别

    前言:学习变量之前若对static修饰符不理解,理解可能比较吃力. 一.下面先大致介绍java中static关键字的作用 1:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 2:静 ...

最新文章

  1. php改7z,PHP的7z扩展名? - php
  2. 在 ASP.NET MVC 中使用 Chart 控件
  3. SQL语句练习(三)
  4. Android实训日志:基于外部存储的音乐播放器V05
  5. 解决:The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
  6. tcp连接探测Keepalive和心跳包
  7. mac查看图片分辨率_Mac图像检查工具-Graphic Inspector
  8. Sum in the tree
  9. matlab 自动处理数据,Matlab Remote IPC自动化数据处理
  10. flask 接口 让别人能访问_flask搭建一个前后端分离的系统
  11. 华为app安装失败与已安装签名_手机APP为什么总是安装失败
  12. 【NOIP2013】【Luogu1980】计数问题
  13. spring boot集成kaptcha图形验证码
  14. gulp-htmlmin 页面压缩插件 gulp插件 参数说明
  15. OpenSSL sm2 签名源码讲解
  16. 量子计算是人工智能的未来吗?
  17. 在WINDOWS下的Services.mscl里有好几个ORACLE的SERVICES的一些作用
  18. 工信部191号文《App违法违规收集使用个人信息行为认定方法》
  19. 常用的数学符号sup(上确界) 和 inf(下确界)以及少量数学公式的markdown模式下latex 格式 编写
  20. 图像sensor的工作原理

热门文章

  1. 梦幻之旅:盘点一生必去的50…
  2. 360的服务器在哪个文件夹,360rec是什么文件夹?可以删除吗?
  3. 桌面图标文字有蓝底怎么办
  4. Flink在监控流计算中的应用
  5. 【XSY3331】东非大裂谷(结论,DP)
  6. Microbiome:鸡肠道微生物宏基因集(张和平、魏泓、秦楠点评)
  7. SAP 离散,流程,重复制造
  8. 朱晔的互联网架构实践心得S2E1:业务代码究竟难不难写?
  9. 教你在3GPP官网下载协议
  10. NLP(五十二)抽取式词义消歧(WSD)