关于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

相关推荐

求面试求offer啊啊啊啊:要求太多的没必要理
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客企业服务