Strings=newString("xyz")
创建两个对象,引用对象s,字符串对象"xyz";
Strings1=newString("xyz")Strings=newString("xyz")
两个引用对象s1、s,两个内容相同的字符串对象"xyz",它们在内存中的地址是不同的.
记住,凡是用new生成的总是新对象.
Strings1="xyz";Strings="xyz";
如果像上面这样写,s1、s引用的才是同一个常量池中的对象.
在java中,一切都是对象。只是常量池的"xyz"只有一份,无论有多少个引用。
如果开始在常量池中没有xyz这个对象,你不是要新创建一个吗?那就是3个啊
也就是说这个答案可能有2个也可能有3个。。。。。。。。
Strings="xyz";//这种方式是把"xyz"放到常量池,这是编译时产生的Strings=newString("xyz");//这种方式是把"xyz"放到虚拟机的heap中,这是运行时产生的举例来说:Strings1="xyz";//在常量池存放一个对象Strings2=“xyz”;//s2引用常量池中的对象,不产生新对象Strings3=newString("xyz");//在虚拟机的heap中产生一个新的对象Strings4=newString("xyz");//在虚拟机的heap中又产生一个新的对象这么说能理解了吗?
我能理解你的意思,我想问的是newString("xyz")应该是这样理解吧:我要创建一个值为“xyz”的对象在heap中,其中()里面的“xyz”应该是个实际参数吧,那么作为实际参数它首先应该在编译期间就放在常量池中,如果有就不创建,没有就创建一个新的“xyz”对象。是否?
今天看了下java编程思想4s不是对象,它是句柄或者说是引用。。。。