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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵崇友 中级黑马   /  2013-5-12 15:30  /  1894 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵崇友 于 2013-5-13 10:38 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

7 个回复

正序浏览
   这个问题都不知道被问了多少遍了
String  s1="abc";       //这个是在data segment 里面建立了一个字符串 abc
String s2 =new String ("abc");   这个 栈内存的s2  指向 堆内存的 String 对象 然堆内存的String 又指向了 data segment 里面的那个abc

回复 使用道具 举报
注意结贴。。。查看你们的帖子真的很耗时时间。。真心希望你们及时结贴。。真的很累。。
谢谢合作
回复 使用道具 举报
小陈期待逆袭 发表于 2013-5-12 16:51
String s2 = new String(“abc”); 这句,创建了两个对象..其内容都是”abc”.注意,s2不是对象,只是引用.只 ...

String pool 是传说中的常量池吗?

点评

对的。。  发表于 2013-5-13 09:07
回复 使用道具 举报
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”这个对象.没有则创建一个。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
淡蓝色 发表于 2013-5-12 16:20
一个是代表"abc"的字符串对象,还有一个就是s2这个对象

s2是String类型变量吧,它的值是内存地址值。
回复 使用道具 举报
一个是代表"abc"的字符串对象,还有一个就是s2这个对象
回复 使用道具 举报
String str="abc";//str进入内存后,首先在栈内存中开辟空间,str引用变量对应值是“abc”,它是不会进堆的。
String str1=new String("abc");//进入内存后,先查看栈内存中是否有“abc”,这个变量,如果没有,就开辟一个“abc”,并同时在堆内存中开辟一块空间new String("abc");就是这两个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马