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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

“hello world” ,
以上是一个字符串,是一个字符串常量。但是用
new String("hello world") ,视频上说会产生两个内存空间,

  是不是相当是String类的一个匿名对象,然后new自己也会开辟一个空间?其实我自己都有点乱。。


5 个回复

倒序浏览
这事儿不怪你 毕老师没讲清楚 new String()创建对象 在堆内存中 而"hello world"本身就是一个对象 在常量池中 这句话将常量池中的对象搞到堆内存中 并找了个指针指向它
回复 使用道具 举报
慕容旺财 发表于 2015-7-2 18:47
这事儿不怪你 毕老师没讲清楚 new String()创建对象 在堆内存中 而"hello world"本身就是一个对象 在常量池 ...

我已经搞清楚了,“hello world”这个字符串匿名对象会在堆内存里面占一个空间,但是没有栈内存指向;

new String("hello world")之中的new会产生内存空间,加上上面那个“hello world”内存,一共是两个内存空间的。
回复 使用道具 举报
慕容旺财 发表于 2015-7-2 18:47
这事儿不怪你 毕老师没讲清楚 new String()创建对象 在堆内存中 而"hello world"本身就是一个对象 在常量池 ...

请问是 new String()创建的对象 指向了 hello world吗??????
回复 使用道具 举报
wengjialiang 发表于 2015-7-4 21:38
请问是 new String()创建的对象 指向了 hello world吗??????

不是
String这种对象比较特殊 他把这些字符们都放在常量池(也是内存的一部分)里面 然后在内存中(堆内存)还要新建对象
然后你不是传了hello world进去么 他先在常量池里面找一下看有没有现成的 没有现成的再新建对象的
所以是俩对象
回复 使用道具 举报
这个知识点我也是刚开始不太明白,后来是在论坛找到的答案,二楼说的很正确
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马