String a=new String("foo");一共产生了几个对象?为什么??谢谢! 如题!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕, 又来问!!!! http://community.csdn.net/Expert/TopicView.asp?id=4001668 一共产生了几个对象?一共产生了几个对象?不解???String a=new String("foo");String a是声明了一个String型别的对象(说指针可能好懂点)new String("foo");是创建了一个String型别的对象(也就是在内存里new了一块空间里面放的是“foo”);String a=new String("foo");也就是将这个指针指向内存里new出来的那块空间。我想应该只产生了一个对象。 单然是一个对象了,记得有人发过说:那个考官说是三个对象,分别为:f,o,o;真是狂晕,这种人也可以当考官啊!出过个问题的人,真的是有毛病,一点意义都没有,改成这样还有点意义:String a=new String("foo");String b="foo";产生了几个对象? 如果分开写应该问题就比较清晰了。String b="foo";String a=new String(b); 只有一个对象,String a只是申明了一个变量,还没有为a分配空间.=new String("foo")则在内存空间内分配一块"foo",a指向这个空间,同时为变量保留副本 无语中。没人看我引用的那个贴子么???这个问题说得我自己耳朵都起茧了,竟然还有人认为是一个!二个, 分别是: 字面量"foo"new String("foo")持不同意见的人, 请看我引用的那个贴子, 或者直接去看<Effetive JAVA>中的第四条“Avoid Creating Duplicate Objects”。 哎,又是这个问题。基础没有牢固2个啊,一个是new的,一个是对foo的引用 确实是一个或两个。(一开始俺也想当然两个了-_!!!)当常量池中已经存在"foo"了,就不会重新创建了。而new String(***)肯定是新的对象了。 String * a=new String("foo"); 两个对象,一个是“foo”,一个是指向“foo”的引用对象s。 String a = new String("foo");第一次执行时创建了二个, 一个为字面量"foo"(它本身是一个String对象), 一个为new String("foo")(它是通过new创建的, 功能上和字面量"foo"完全一样, 但却是另一个对象).第二次执行时, 只创建一个, 即new String("foo"), 这是因为: "foo"作为String字面量, 是存在于String Pool里面的, 第二次使用它时, 直接指向原有的String, 而不再创建新的String; 但new String("foo")却每执行一次都创建一个新的,完全一样的String对象.因此, 结论是: 永远不要使用 String a = new String("foo");这种方式来创建字符串, 而要用String a = "foo";这种方式. 这一点在<Effetive JAVA>第四条中说得很清楚了. 楼上此言差矣, 这是JAVA大师的经验之谈.编程思想固然重要, 但是对底层实现一无所知, 肯定写不出好的程序. 学习,java确实有一个String Pool的东西,写了一个段代码:public class StringLence { public static void main(String[] args) { String s = "abc"; //放在String pool里,产生了一个对象 String n = s; s = "abc"; //关键在这里,它并没有产生新的对象,而是指向原来的 System.out.println(s == n); //返回结果是true,证明。 }} 关于使用poi读取doc文件的问题 新手求救,关于applet在浏览器中显示的问题 怎么样培养自己的编程思想 线程Interrupt基础问题 得分好贴 Java兴趣小组,有兴趣的来 谁能介绍javax.sound.midi包里的一些类 在ECLIPSE中不能制作自定义的嵌套包吗,感谢 请教关于OutOfMemoryException 如何把西班牙转成汉字 有谁知道能下载JAVA 2.0 的地址? 请问如何对ResultSet或RowSet进行排序 请教两台机器之间文件拷贝的问题
String a=new String("foo");
String a是声明了一个String型别的对象(说指针可能好懂点)
new String("foo");是创建了一个String型别的对象(也就是在内存里new了一块空间里面放的是“foo”);
String a=new String("foo");也就是将这个指针指向内存里new出来的那块空间。
我想应该只产生了一个对象。
出过个问题的人,真的是有毛病,一点意义都没有,
改成这样还有点意义:String a=new String("foo");String b="foo";产生了几个对象?
String b="foo";
String a=new String(b);
new String("foo")持不同意见的人, 请看我引用的那个贴子, 或者直接去看<Effetive JAVA>中的第四条“Avoid Creating Duplicate Objects”。
2个啊,一个是new的,一个是对foo的引用
而new String(***)肯定是新的对象了。
编程思想固然重要, 但是对底层实现一无所知, 肯定写不出好的程序.
public class StringLence { public static void main(String[] args) {
String s = "abc"; //放在String pool里,产生了一个对象
String n = s;
s = "abc"; //关键在这里,它并没有产生新的对象,而是指向原来的
System.out.println(s == n); //返回结果是true,证明。
}
}