首页

文章

java中堆和栈内存的区别

发布网友 发布时间:2022-02-28 22:40

我来回答

1个回答

热心网友 时间:2022-03-01 00:10

栈内存:
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。栈内存主要存放的是基本类型类型的数据 如( int, short, long, byte, float, double, boolean, char) 和对象句柄。注意:并没有String基本类型、在栈内存的数据的大小及生存周期是必须确定的、其优点是寄存速度快、栈数据可以共享、缺点是数据固定、不够灵活。
栈的共享:

String str1 = "myString"; String str2 = "myString"; System.out.println(str1 ==str2 ); //注意:这里使用的是str1 ==str2,而不是str1.equals(str2)的方式。 //因为根据JDK的说明,==号只有在两个引用都指向了同一个对象时才返回真值 //而str1.equals(str2),只是比较两个字符串是否相等

结果为True,这就说明了str1和str2其实指向的是同一个值。
上述代码的原理是,首先在栈中创建一个变量为str1的引用,然后查找栈中是否有myString这个值,如果没找到,就将myString存放进来,然后将str1指向myString。接着处理String str2 = "myString";;在创建完str2 的引用变量后,因为在栈中已经有myString这个值,便将str2 直接指向myString。这样,就出现了str1与str2 同时指向myString。
特别注意的是,这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个对象引用变量也即刻反映出这个变化。相反,通过字面值的引用来修改其值,不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例,我们定义完str1与str2 的值后,再令str1=yourString;那么,str2不会等于yourString,还是等于myString。在编译器内部,遇到str1=yourString;时,它就会重新搜索栈中是否有yourString的字面值,如果没有,重新开辟地址存放yourString的值;如果已经有了,则直接将str1指向这个地址。因此str1值的改变不会影响到str2的值。

堆内存:
堆内存用来存放所有new 创建的对象和 数组的数据

String str1 = new String ("myString"); String str2 = "myString"; System.out.println(str1 ==str2 ); //False String str1 = new String ("myString"); String str2 = new String ("myString"); System.out.println(a==b); //False

创建了两个引用,创建了两个对象。两个引用分别指向不同的两个对象。以上两段代码说明,只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。
谷歌浏览器怎么设置成中文_谷歌浏览器设置中文语言 【谷歌浏览器技巧】谷歌浏览器如何更改语言? 史上最全ETF全解 证券ETF是深市的吗 怎样把莲藕肉丸子做的好吃? 高三语文小说赏析小说形象分析与答题技巧 人物形象题答题技巧 借助什么分析小说的人物形象 脖子旁边疼是什么原因 在群里不是好友怎么把群里人建另一个群 蛇床子的药理作用 炒蛇床子和生蛇床子有什么区别 为什么把床头垫高点 为什么床头高点儿 为什么要给新生儿抬高床头 人脸识别打卡考勤机找哪家? 背后搞你的人什么心态 很皮的搞笑撩人句子高情商的撩人句子(82句) 恶搞爱情短信 床头挂什么财运最旺最好 床上放什么东西辟邪 道家床头挂什么画最好最旺 床头贴什么最好最旺道家 建设工程竣工后,是否必须取得《规划验收许可证》? 环评竣工验收 手机几年没用了开不了机怎么办 红烧啤酒鸡的家常做法大全怎么做好 双男主泰剧新剧推荐 2019泰剧《爱情理论》小受暗恋花心直男好友 液体卫生巾和普通卫生巾的区别是什么?液体卫生巾的优点 可水洗粘尘垫哪家好 电脑12g够用吗? 宝宝双侧肺炎病变严重吗 什么是洁净气体灭火器 2024年实用父亲节礼物推荐有哪些?(2300字选购指南) 40包速溶咖啡比对 作文请以“这样挺好”为题,写一篇记叙文或议论文,不少于800字。要求... 如何写好作文我就是这么好 惊魂未定什么意思?有什么典故? 安阳火车站到新师院北门的公交车有哪些? 安阳市公交车26从火车站发车多长时间到终点站 太仓汽车站去太仓乐遥浏河公墓坐几路公交 请问廉江市哪里有奥克斯手机专业维修店,急!! 梅赛德斯奔驰E350敞篷版的整体简介及其性能如何 员工出差前需要做什么准备工作? 用(祝愿自己生日快乐)写首藏头诗,希望有才华的人帮帮忙,谢谢了_百度... 请问做爱前吃什么药可以延长做爱时间? 我每天锻炼,然后吃什么,能延长我房事时间?现在两分钟,双方都苦恼。_百 ... 做爱前吃什么最能滋补身体 吃什么能让房事时间长些? java中堆和栈的区别!!!! 红米手机开发者选项在哪?? 通信工程考什么证书比较有用? PHP考证?? 2021年系统分析师考试时间是什么时候? 怎么修改 计算机专业考试考什么科目? 可以修改两次吗?怎么修改 怎么改,修改的方法 怎样修改 怎么修改? 通信工程华为认证有什么 怎么修改,怎么修改微信密码 c语言可以做什么? 可以修改了,你知道怎么修改吗 读C语言有什么用?可以做什么啊? 怎么能修改 C语言能做什么用? 微信怎样可以改 c语言能做什么? java堆和栈分别存什么东西 软件设计师考试要考哪些计算机编程语言?C语言要考吗? 软件设计师需要哪些书籍 微信付款指纹怎么设置在哪里 华为认证的培训机构有哪些? 华为认证hcie培训机构怎么选择 华为认证的培训中心 华为认证培训哪家好 华为认证网络工程师培训机构哪家好? 软件架构师是不是包括系统架构师和系统分析师? 通信网络规划与设计具体工作是什么? 如何解封的处理方法 网络规划设计的主要工作是 如何解封 功能被限制怎样解封? 怎样解封 hcnp 华为认证考试。。。。。。华为认证考试交过费用后,第一次没考过,第二次再考还要次考试费吗 华为认证HCNP的考试难不难 怎么解封 被封一个月怎样解封?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com