社区
Java
帖子详情
java new基本类型对象,是放在堆中还是栈中
hw120219
2017-12-12 05:55:21
String e=new String("a");
String f="a";
System.out.println(e==f);
结果为何返回false
如果new的对象放在栈中,应该放在常量池中,应该是true。
如果放到堆中,可是基本类型不都是放在栈上吗?
...全文
2270
11
打赏
收藏
java new基本类型对象,是放在堆中还是栈中
String e=new String("a"); String f="a"; System.out.println(e==f); 结果为何返回false 如果new的对象放在栈中,应该放在常量池中,应该是true。 如果放到堆中,可是基本类型不都是放在栈上吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csdnmaxixi
2021-01-11
打赏
举报
回复
比如 class 1 { A = new class2() main() { B = new class3() } } 类的实例A B是不是都存在堆内存中?
csdnmaxixi
2021-01-11
打赏
举报
回复
比如 class 1 { int a main() { int b} } 数据a b是不是都存在栈中?
csdnmaxixi
2021-01-11
打赏
举报
回复
假设在类A的main方法里 new类B 的实例, 那个这个B的实例 是放在栈中 还是 堆中? 放在堆中的话 ,理论上来说它其实是类A的局部变量。 还是说只要NEW出来的对象实例,都是放在堆中? 不管它是在方法体的外,还是内 。 只要是NEW出来的 ,就放到堆里, 那方法体之外不是 NEW出来的变量呢? 比如int A .(它 是类A的全局变量,它应该在栈里还是堆里)。 我现在有点糊涂的是, 存在堆里还是栈里 是依据数据类型来的吗? 只要是基本数据类型 比如 int char double 这些都放到栈里, 只要是引用数据类型都放到堆里? 比如string 比如 自定义的类的实例。 和全局 ,局部没有关系?
KaiRyuuSD
2019-08-06
打赏
举报
回复
2
String e=new String("a");//创建了两个对象:一个将“a”存放在常量池(字符串池)中,一个new的在栈中存放引用。 String f="a";//没有创建对象:先找常量池中有没有“a”,发现有,因此直接从池中取出而不创建新对象。 System.out.println(e==f); //双等对于基本类型数据比较的是值,而这里对于对象来说是比较的引用: //如果输出System.identityHashCode(e),返回的应该是e在栈中的“地址”。 //所以e==f应该是比较的e在栈中的“地址”和f在常量池中的“地址”(e跟f共用常量池中的一块“地址”)
遥远的想念
2017-12-13
打赏
举报
回复
== 同时还比较地址的值,如果不是同一个对象,肯定不相等。又因为new出来的对象是新分配的一个内存地址空间,所以不会相等
张三顺
2017-12-13
打赏
举报
回复
new 出来的对象,指向的是内存地址值; “” 字符串是从常量池里面拿的; 结果肯定是false啊; 例如:String a = “A”;String b = “A”; 这两个都是从常量池拿的, a== b 为true String a = new String(“A”);String b = new String(“A”);这两个完全是两个不同的内存地址值,a == b 为false
自由自在_Yu
2017-12-13
打赏
举报
回复
系统内存一般情况来说分为四个 heap 堆 放 对象 也就是new 出来的东西 stack 栈 放局部变量 static segment 静态区 用来放 静态变量 和字符串常量 data segement 代码区 用来放代码的 String e=new String("a"); //e是存放在堆内存里,栈内存里存放e对应的引用地址 String f="a"; //f存放在栈内存的常量池中, String不是基本类型,直接定义的String f="a";存放在常量池,new出来的就是放在堆内存
xls丶
2017-12-13
打赏
举报
回复
new的对象肯定放在堆里啊
xigongdaacm
2017-12-12
打赏
举报
回复
使用String a="xx";是字符串常量,存在栈的常量池中,但是使用String b = new String("xx");就是重新new一个对象,这个是存放在堆中的。 如上比较,肯定返回false;
广寒月蛮兔
2017-12-12
打赏
举报
回复
String是对象,==相当于比较两个对象的地址,栈中保存的是引用变量,常量池不在堆栈中是独立的一个内存空间
Java155
2017-12-12
打赏
举报
回复
String在Java中不是基本类型……
Java
中
对象
到底存在
堆中
还是
栈中
创建一个
对象
的时候,到底是在
栈中
分配还是在
堆中
分配需要看2个方面:
对象
类型
和在
Java
中存在的位置 1.如果是
基本
数据
类型
,byte、short、int、long、float、double、char,如果是在方法中声明,则存储在
栈中
,其它情况都是在
堆中
(比方说类的成员变量就在
堆中
); 2.除了
基本
数据
类型
之外的
对象
,JVM会在
堆中
创建
对象
,
对象
的引用存于虚拟机
栈中
的局部变量表中 3.并不是所有的
对象
都在
堆中
存储,可以走栈上分配,在不在栈上分配取决于Hotspot的一个优化技术:“逃逸分析” 一般JVM 执行
new
创建
对象
,
对象
保存在堆还是栈?
new
创建
对象
,
对象
保存在堆还是栈? -->堆内存是用来存放由
new
创建的
对象
和数组,即动态申请的内存都存
放在
堆内存 -->栈内存是用来存
放在
函数中定义的一些
基本
类型
的变量和
对象
的引用变量 例子:局部变量存
放在
栈;
new
函数和malloc函数申请的内存在堆;函数调用参数,函数返回值,函数返回地址存
放在
栈 堆和栈的区别 1、栈区(stack)—由编译器自动分配释放...
java
中的堆与栈
前言:
java
中常常听到堆栈,但是好多时候感觉还是一个模糊的认识。因此,一定要认真的看下这方面的东西,查阅资料。并作出总结。 堆与栈
基本
认识
基本
认识 首先呢,提出问题:内存中的堆栈和数据结构中的堆栈是否是一样的? 不必过于深刻的去探究的话,也会想到,当然是不同的概念啦!内存中的堆栈是实际存在的存储空间,数据结构中的堆栈只是抽象出来的数据存储结构。 具体的话,首先,内存中所谓的堆栈其实是属于其中的一个划分,叫做动态存储区。动态存储区的话,就分为栈区和堆区。除了动态存储区的话,内存还可以分为代码区和静态数据
new
创建
对象
,保存在堆内存还是栈内存
new
创建
对象
,保存在堆内存还是栈内存。栈内存是用来存
放在
函数中定义的一些。
创建
对象
的时候堆内存的分配
在学习
Java
的过程中,一般认为
new
出来的
对象
都是被分配在堆上的,其实这个结论不完全正确,因为是大部分
new
出来的
对象
被分配在堆上,而不是全部。通过对
Java
对象
分配的过程分析,可以知道有另外两个地方也是可以存放
对象
的。这两个地方分别栈 (涉及逃逸分析相关知识)和TLAB(Thread Local Allocation Buffer)。我们首先对这两者进行介绍,而后对
Java
对象
分配过程进行介绍。在JVM中,堆是线程共享的,因此堆上的
对象
对于各个线程都是共享和可见的,只要持有
对象
的引用,就可以访问
堆中
存储
Java
50,526
社区成员
85,606
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章