关于String的问题。

String s1 = new String("aaa");

在内存中的创建过程为:
1. 首先在栈内存中为s1分配一块空间。
2. 在堆内存中为String对象分配一块空间,并设定初始值。
3. 根据String类中对属性的定义,为对象的属性进行赋值操作。
4. 调用构造方法
5. 讲String对象在内存中的地址赋值给栈中的 s1。

正常对象的创建过程应该是这样的。我想请问,"aaa"放到了字符串的常量池了吗?
全部评论
String s1="abc"这是放在了常量池,只有一个常量池对象 String s2 = new String("abc");其实是有两个对象,一个是堆对象,一个是常量池对象
点赞 回复 分享
发布于 2019-03-01 16:54
有的吧,编译的时候就把"aaa"放进了字符串常量池,运行的时候在new对象
点赞 回复 分享
发布于 2019-03-01 22:51
https://www.cnblogs.com/xiaoxi/p/6036701.html 这篇文章讲的很详细。
点赞 回复 分享
发布于 2019-03-01 16:59
jdk1.7以上会同时在常量区和堆中生成。1.7把常量区移到堆里面了。
点赞 回复 分享
发布于 2019-03-01 23:06
楼上说的对
点赞 回复 分享
发布于 2019-03-01 16:56
没有
点赞 回复 分享
发布于 2019-03-01 16:10
String a = new String("a"); String b = new String("a"); System.out.println(a==b); 执行为false,证明没有放常量池
点赞 回复 分享
发布于 2019-03-01 16:06
CXX的new不是开在堆里面嘛(
点赞 回复 分享
发布于 2019-03-01 16:04

相关推荐

点赞 评论 收藏
分享
04-28 22:33
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
投递牛客等公司7个岗位 > 牛客激励计划
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客企业服务