黑马程序员技术交流社区
标题:
问一个声明对象的问题
[打印本页]
作者:
孙沛
时间:
2012-9-2 08:56
标题:
问一个声明对象的问题
String s = "hello world";//这是不是声明了一个String对象
再加一句,
String ss = s;//这是不是又声明了一个ss对象
作者:
宋启龙
时间:
2012-9-2 09:23
本帖最后由 宋启龙 于 2012-9-2 09:25 编辑
String s = "hello world";//这是不是声明了一个String对象 是的 指向"Hello world"这个String类型的对象,名为“s”.声明了一个只能指向String对象的 引用变量
String ss = s;//这是不是又声明了一个ss对象 不是 声明了另外一个只能指向String对象的引用,名为ss,s只是一个引用变量,并不是一个对象,在内存中,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
作者:
黑马-王言龙
时间:
2012-9-2 09:24
第一个是将"hello world"放在"常量池"中,作为一个对象存在,由String类型的变量s引用
第二个是将ss引用指向了上常量池中的"hello world",并没有创建新的对象。
作者:
李杰
时间:
2012-9-2 09:25
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("")相同。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2