A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牧风 中级黑马   /  2016-7-30 22:05  /  1881 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String  s= "abdc";
String s2  = new String ("abdc");
为什么两个都是创建了对象?? 规定??求解释

29 个回复

倒序浏览
cat73 黑马帝 2016-7-30 22:14:16
沙发
本帖最后由 cat73 于 2016-7-31 01:05 编辑

实际上只有第二句创建了对象。
具体解答:http://bbs.itheima.com/forum.php ... 580&pid=2642261

回复 使用道具 举报
cat73 发表于 2016-7-30 22:14
实际上只有第二句创建了对象。

C:\Users\mf\Desktop
第一次发这个帖子 不知道怎么在贴吧发截图 你看能看到吗

QQ图片20160730221844.png (8.12 KB, 下载次数: 29)

QQ图片20160730221844.png
回复 使用道具 举报
cat73 黑马帝 2016-7-30 22:33:47
板凳
牧风 发表于 2016-7-30 22:20
第一次发这个帖子 不知道怎么在贴吧发截图 你看能看到吗

实际上这个答案是错误的 "abc" 并不是在执行这个语句的时候创建的。
回复 使用道具 举报
一个在常量池,一个在堆内存,
回复 使用道具 举报
cat73 发表于 2016-7-30 22:33
实际上这个答案是错误的 "abc" 并不是在执行这个语句的时候创建的。

能回答的详细一点吗
回复 使用道具 举报
两个对象  只是新建的位置不同而已
回复 使用道具 举报
只有第二句创建了对象
回复 使用道具 举报
牧风 中级黑马 2016-7-30 23:25:07
9#
shockzwel1 发表于 2016-7-30 23:22
两个对象  只是新建的位置不同而已

就是说是规定 一个在堆 内存 一个在常量池是吧?
回复 使用道具 举报
Java中  有很多 规定  你要自己懂。
回复 使用道具 举报
shockzwel1 发表于 2016-7-30 23:26
Java中  有很多 规定  你要自己懂。

秒懂了= = = = = = = =算了 洗洗睡了
回复 使用道具 举报
s进栈 s2进堆内存
回复 使用道具 举报
同学  来一把狼人杀吧
回复 使用道具 举报
只要创建了对象就会在堆内存出现,明显s没进堆内存,所以不算创建对象
回复 使用道具 举报
cat73 黑马帝 2016-7-30 23:40:26
15#
本帖最后由 cat73 于 2016-7-30 23:42 编辑
牧风 发表于 2016-7-30 23:08
能回答的详细一点吗

等你以后研究深入一些大概就明白了。。。
"abc" 是通过 ldc 获取的,ldc 的字符串是在解析阶段创建的。
相关文档:
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4.3
回复 使用道具 举报
这个设计到常量池和堆内存,第一个指向常量池,第二个指向堆内存
回复 使用道具 举报
cat73 发表于 2016-7-30 22:14
实际上只有第二句创建了对象。

在常量池也应该是创建了对象的啊
回复 使用道具 举报
cat73 发表于 2016-7-30 23:40
等你以后研究深入一些大概就明白了。。。
"abc" 是通过 ldc 获取的,ldc 的字符串是在解析阶段创建的。
相 ...

为何冯佳老师和你说的不一样?
回复 使用道具 举报
cat73 黑马帝 2016-7-31 00:16:38
19#
qetu001212 发表于 2016-7-31 00:02
在常量池也应该是创建了对象的啊

常量池当然要创建对象呀,但是这个对象是在执行这个语句的时候创建的么?
回复 使用道具 举报
s实在字符串常量池中创建  s2堆内存中创建对象
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马