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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-2 08:56  /  1596 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = "hello world";//这是不是声明了一个String对象
再加一句,
String ss = s;//这是不是又声明了一个ss对象


3 个回复

倒序浏览
本帖最后由 宋启龙 于 2012-9-2 09:25 编辑

String s = "hello world";//这是不是声明了一个String对象    是的      指向"Hello world"这个String类型的对象,名为“s”.声明了一个只能指向String对象的 引用变量

String ss = s;//这是不是又声明了一个ss对象     不是    声明了另外一个只能指向String对象的引用,名为ss,s只是一个引用变量,并不是一个对象,在内存中,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。

回复 使用道具 举报
第一个是将"hello world"放在"常量池"中,作为一个对象存在,由String类型的变量s引用
第二个是将ss引用指向了上常量池中的"hello world",并没有创建新的对象。
回复 使用道具 举报
String s = "hello world";  //如果之前没有声明一个字符串变量为"hello world",则会在字符串池里创建一个对象
String ss = s;//这只是声明了个变量ss指向了s,并没有创建对象。
因为Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc",然后将其付给str(这样并不在字符串池里)。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。String str = new String()创建了一个空字符串,与String str=new String("")相同。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马