黑马程序员技术交流社区

标题: 关于字符串的一些小问题,有点理不清 [打印本页]

作者: dadai5ai    时间: 2015-6-28 16:57
标题: 关于字符串的一些小问题,有点理不清
“hello world” ,
以上是一个字符串,是一个字符串常量。但是用
new String("hello world") ,视频上说会产生两个内存空间,

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



作者: 慕容旺财    时间: 2015-7-2 18:47
这事儿不怪你 毕老师没讲清楚 new String()创建对象 在堆内存中 而"hello world"本身就是一个对象 在常量池中 这句话将常量池中的对象搞到堆内存中 并找了个指针指向它
作者: dadai5ai    时间: 2015-7-4 20:12
慕容旺财 发表于 2015-7-2 18:47
这事儿不怪你 毕老师没讲清楚 new String()创建对象 在堆内存中 而"hello world"本身就是一个对象 在常量池 ...

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

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

请问是 new String()创建的对象 指向了 hello world吗??????
作者: 慕容旺财    时间: 2015-7-4 22:11
wengjialiang 发表于 2015-7-4 21:38
请问是 new String()创建的对象 指向了 hello world吗??????

不是
String这种对象比较特殊 他把这些字符们都放在常量池(也是内存的一部分)里面 然后在内存中(堆内存)还要新建对象
然后你不是传了hello world进去么 他先在常量池里面找一下看有没有现成的 没有现成的再新建对象的
所以是俩对象
作者: 帅帅loyal    时间: 2015-7-4 22:33
这个知识点我也是刚开始不太明白,后来是在论坛找到的答案,二楼说的很正确




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2