黑马程序员技术交流社区

标题: 有关String 类中的一个小问题 [打印本页]

作者: 赵崇友    时间: 2013-5-12 15:30
标题: 有关String 类中的一个小问题
本帖最后由 赵崇友 于 2013-5-13 10:38 编辑

回头又看了毕老师的视频,看到String类中遇到点疑惑:
String  s1="abc";
String s2 =new String ("abc");

老师讲这两个的区别是:s1代表一个对象,s2代表两个对象;
s2代表哪两个对象呀?

作者: ld5128702    时间: 2013-5-12 15:39
String str="abc";//str进入内存后,首先在栈内存中开辟空间,str引用变量对应值是“abc”,它是不会进堆的。
String str1=new String("abc");//进入内存后,先查看栈内存中是否有“abc”,这个变量,如果没有,就开辟一个“abc”,并同时在堆内存中开辟一块空间new String("abc");就是这两个
作者: 淡蓝色    时间: 2013-5-12 16:20
一个是代表"abc"的字符串对象,还有一个就是s2这个对象
作者: 赵崇友    时间: 2013-5-12 16:36
淡蓝色 发表于 2013-5-12 16:20
一个是代表"abc"的字符串对象,还有一个就是s2这个对象

s2是String类型变量吧,它的值是内存地址值。
作者: 小陈期待逆袭    时间: 2013-5-12 16:51
String s2 = new String(“abc”); 这句,创建了两个对象..其内容都是”abc”.注意,s2不是对象,只是引用.只有new生成的才是对象.创建的流程是,首先括号里的”abc”先到String pool里看有没”abc”这个对象,没有则在pool里创建这个对象..所以这里就在pool创建了一个”abc”对象.然后 通过new语句又创建了一个”abc”对象..而这个对象是放在内存的堆里. .这里的s2指向堆里的对象.
String s1 = “abc”; 这条语句,s1是引用.读到”abc”会在Stringpool里查找有没有”abc”这个对象.没有则创建一个。

作者: 赵崇友    时间: 2013-5-12 17:17
小陈期待逆袭 发表于 2013-5-12 16:51
String s2 = new String(“abc”); 这句,创建了两个对象..其内容都是”abc”.注意,s2不是对象,只是引用.只 ...

String pool 是传说中的常量池吗?
作者: 刘胜寒    时间: 2013-5-13 09:07
注意结贴。。。查看你们的帖子真的很耗时时间。。真心希望你们及时结贴。。真的很累。。
谢谢合作
作者: 花开花落总相似    时间: 2013-5-13 10:19
   这个问题都不知道被问了多少遍了
String  s1="abc";       //这个是在data segment 里面建立了一个字符串 abc
String s2 =new String ("abc");   这个 栈内存的s2  指向 堆内存的 String 对象 然堆内存的String 又指向了 data segment 里面的那个abc






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