黑马程序员技术交流社区
标题:
很有意思的一个问题--下面这个语句产生了几个对象
[打印本页]
作者:
wq10zj
时间:
2014-2-9 13:22
标题:
很有意思的一个问题--下面这个语句产生了几个对象
请问上下面的语句一共生成了几个对象?
String s = "a";
System.out.println(s.toString());
作者:
郭运川
时间:
2014-2-9 16:21
String s = "a";//此句话等于String s = new String("a");此时在堆内存中创建了一个对象
System.out.println();这句话是不能创建对象,关键是看里面的内容
s.toString();//对象S调用toString()方法,“a"是引用类型的String,而最后生成的结果还是String类型的“a"
所以我认为是只生成了一个对象
作者:
箬竹小筑
时间:
2014-2-9 16:53
我认为是一个对象
作者:
周昭民
时间:
2014-2-9 17:24
public static void main(String args[]){
String s1="abc";//s1是一个类类型变量,"abc"是一个对象。
//字符串最大特点:一旦被初始化就不可以被改变。
String s2=new String("abc");
/*
s1和s2有什么区别?
s1代表一个对象"abc"
s2代表两个对象 (new String()和"abc")
*/
// s1="kk"; //"abc"内容没有变化过,s1只是指向了一个新的对象"kk"
}
复制代码
哥们是想问String s ="a";和String s=new String("a");的区别的吧。在毕向东老师第13天01的视频里面有讲过这件事。你问的问题的答案是一个对象。可以参考一下我的代码,你只要记住,字符串被创建就不可更改。
作者:
itpower
时间:
2014-2-9 19:05
只有一个“a”String对象啊 ,s只是这个对象的一个引用,所以我觉得只有一个对象!
作者:
嘿╰_╯往哪里跑
时间:
2014-2-10 09:06
public String toString() {
return this;
}
返回的是当前对象,所以应该是产生两个对象。
作者:
潘金锋
时间:
2014-2-10 20:59
请问上下面的语句一共生成了几个对象?
String s = "a";
System.out.println(s.toString());
生成了两个对象
一个字符串对象“a”
一个String对象
作者:
袁梦希
时间:
2014-2-10 21:23
不错 如果不懂继续追问
作者:
奋斗的小胖子
时间:
2014-2-11 09:45
两个对象?一个是原来的String S对象, 一个是调用toString方法返回的对象?
作者:
嗯√低调〆
时间:
2014-2-11 12:04
String s = "a",String s = new String("a"); s只创建一次,下面的输出方法调用的是该对象的方法
作者:
skyname
时间:
2014-2-11 12:20
String s = "a";
System.out.println(s.toString());
String s,这句是建立了一个String类型的引用s,赋值号右边的“a”实际上就是new String("a"),此时在堆内存中创建了一个对象,引用s指向这个对象。s.toString()是调用Object类中的toString()方法将s所指向的对象中的内容转换成字符串的形式,最后再输出,所以,在这里,在输出语句中写s.toString()和s,效果是一样的。System.out.println();
打印引用类型,默认的就调用对象的toString()方法
Sysout.out是一个PrintStream对象,print方法中有一个重载是
public void print(Objcet o) {
write(String.valueOf(o));
}
而
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这就是System.out.print的实现过程。
注意,在传的参数不是String的时候,会调用String.value的各种重载把Long、Double等类型的对象转成String。在参数是String的时候,就不会这么麻烦,而是直接write了。
作者:
李金中
时间:
2014-2-11 14:44
不对吧。
String s = "a",不是 new String("a");
"a"是字符串常量, 只是声明一个指向它的s。如果 是 String s = new String("a");
是申请了栈空间去创建一个String对象,然后把s指向该对象。至于“a”这个字符串常量对象,是存储在常量区。
地址存储地方都不相同。
.toString方法,看了下API,是返回本身,也就是说 去读取常量区的“a”,所以按楼主的代码,应该始终就一个常量字符串对象
作者:
李金中
时间:
2014-2-11 14:51
有一句话说错了,用new申请的是堆空间。。不是栈,不好意思。这块我觉得可以参考C,感兴趣的话
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2