首页

文章

对Java中堆和栈的概念不太理解。请大神帮我解释下面代码的情况。请详细说明!谢谢

发布网友 发布时间:2022-03-01 01:40

我来回答

2个回答

热心网友 时间:2022-03-01 03:09

首先明白==是比较地址的,在编译时,源码中的常量字符串会分派到字符串常量池中,a,b,y,x都是常量池中的引用。

c==x :因为b是一个不可变类型所以b+2在编译时可以确定是一个常量运行时不会变化,所以b+2可以直接引用常量池中的对象“hi2”
d==x :当然是不等的,因为a是一个变量,运行时很有可能会改变,当然此段代码我们可以看出它们事实是相等的,但是编译器还没有那么聪明,所以编译器不会直接处理,运行时再计算,jdk中的+操作是通过Stringbuffer实现的(可以看源码),也就是说运行时会在堆中分派新的对象,所以d是一个新的地址,一定和x指向的地址不同
a==y就不用说了,编译时就指向常量池中的同一个对象,运行时也没有变化过。追问谢谢你的回答。
在编译器看来,c和d都是一个不确定值的变量。那么c和d的值是存放在栈中,还是堆中?从运行结果推测来看,c==d为false。也就是说c和d的值不是同一个。

热心网友 时间:2022-03-01 04:27

Java中String是一个特殊的包装类数据有两种创建形式:
String s = "abc";
String s = new String("abc");
第一种先在栈中创建一个对String类的对象引用变量s,然后去查找"abc"是否被保存在字符串常量池中,如果没有则在栈中创建三个char型的值'a'、'b'、'c',然后在堆中创建一个String对象object,它的值是刚才在栈中创建的三个char型值组成的数组{'a'、'b'、'c'},接着这个String对象object被存放进字符串常量池,最后将s指向这个对象的地址,如果"abc"已经被保存在字符串常量池中,则在字符串常量池中找到值为"abc"的对象object,然后将s指向这个对象的地址。
第一种特点:JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
第二种可以分解成两步1、String object = "abc"; 2、String s = new String(object); 第一步参考第一种创建方式,而第二步由于"abc"已经被创建并保存到字符串常量池中,因此jvm只会在堆中新创建一个String对象,它的值共享栈中已有的三个char型值。
第二种特点:一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象。
视频相册制作软件如何做视频相册? 用word2007自动生成目录后,目录上始终有个“ 更新目录”的框,怎么去... Word2007目录怎么删除正文 手机不能横屏了是怎么回事? 庞贝柱的结构样貌是怎样的? 埃及庞贝柱景点描述 庞贝柱是怎样的历史? 埃及庞贝柱历史追溯 庞贝柱是个什么样的景点? 庞贝柱是为为了答谢谁而建的? 属蛇穿什么转运最旺运 属蛇什么颜色转运最旺 属蛇的人什么颜色转运最旺 英国查理一世时期君主专政的特征 增值税专用发票开错作废证明怎么写 女主为了救男主被拔掉指甲,被活埋,但男主却认错了人,这本小说叫... 什么地方能读到法拉奇的小说男子汉 高级职称有什么待遇 职称高级相当于什么? HUAWEI 华为 AM185 入耳式有线降噪耳机-适用对象 华为FreeBuds Pro有线充版-入耳式真无线动圈主动降噪蓝牙耳机(陶瓷白... HUAWEI 华为 FreeLace Pro 入耳式颈挂式动圈主动降噪蓝牙耳机 曜石黑... HUAWEI 华为 FreeBuds Pro 入耳式真无线动圈主动降噪蓝牙耳机 墨韵白推... 华为Freebuds 3 无线充版半入耳式真无线蓝牙耳机(碳晶黑)-详细介绍... HUAWEI 华为 FreeBuds 悦享版 入耳式无线蓝牙耳机-详细介绍 如何评价华为新旗舰tws耳机freebudspro? HUAWEI 华为 FreeBuds Pro 无线蓝牙耳机推荐 字符串"\\\"ABC\"\\"所占内存字节的长度 怎样挑选千元内的羊绒大衣? 现在思科的CCNA,CCNE,CCIP的考证费分别是多少啊,通过率怎样 长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 淘宝客必备的九大工具有哪些? 电脑里硬盘如何共享怎么实现多台电脑共用一块硬盘 两台电脑一个硬盘两台电脑是否可以同时用一个硬盘 共享电脑硬盘怎样设置局域网电脑硬盘共享 现在下载歌曲好还是不下好 故障码P033D的含义解析 切菜机多功能型切菜机 scanbox三维扫描仪 苹果13没有删除的备忘录怎么恢复? iphone备忘录永久删除怎么恢复?iphone备忘录恢复最近删除文件方法介绍... 问下大家JAVA的堆和栈有啥区别? java中的“堆栈”是什么意思? win10在哪里看电脑配置 参加PMP考试需要多少项目管理经验 一级注册建筑考试和二级注册建筑师考试有何区别? 一级注册结构工程师和一级注册建筑师有什么区别? apache\httpd-2.2.20 怎么安装? 一级注册结构工程师和一级注册建筑师有什么区别 Apache 2.2.6 如何安装 华为iot认证有用吗 软考中级考什么比较好? C语言,这个计算机语言,具体是干什么的?(讲通俗一点) c语言里说的大数一般表示什么呢? 什么是软考?怎么报考? 软考好考嘛?含金量如何? 网络工程师资格证怎么考 数据库工程师就业好不好学数据库开发有前途吗 C语言 是所有语言的 鼻祖吗?? 关于C语言的C的来历 设计跟美工有啥区别? 职称及资格证书包括哪些 喜欢和爱有什么区别???? 三级证书属于中级职称 喜欢和爱有什么区别?如题 谢谢了 抖音上自动字幕怎么没有了? 发抖音视频选用歌曲歌词识别不出应该怎么办? 项目管理师考试多少分合格 淮安有多少特产? 哪些职称可以评呢 专业技术人才可以直接评中级职称吗? 凭职业资格证书 可以评职称吗? 请问OSTA 证书可以评职称吗,我看你在网上答的可以,所以想详细请教一下。 考了三次信息系统项目管理师,都没有通过,老大下了最后的命令,让我这次必须通过考试,否则别想加工资。 华为数通认证可以工作干什么? 华为认证网络工程师都适合做哪些工作 华为HCNP能做什么工作? 网络工程师所需要学的东西! 想成为一名网络工程师需要学习哪方面的知识? 想提升一下java应该看什么书 Java高级应该看哪些书
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com