黑马程序员技术交流社区
标题:
代码如下。StringBuffer的tostring。。怎么理解?
[打印本页]
作者:
java小兵
时间:
2015-2-4 23:41
标题:
代码如下。StringBuffer的tostring。。怎么理解?
本帖最后由 java小兵 于 2015-2-5 21:04 编辑
public class StringBufferDemo1 {
public static void main(String[] args) {
//StringBuffer s4
StringBuffer s = new StringBuffer("helloworld");
System.out.println("s:"+s);
String ss = s.toString();
System.out.println("ss:"+ss);
String s2 = "helloworld";
System.out.println("s2:"+s2);
System.out.println("ss==s2:"+(ss==s2));
String sss = "helloworld";
System.out.println("sss:"+sss);
System.out.println("s2==sss:"+(s2==sss));
}
}
复制代码
结果如下图。 求大神解释!!!!
StringBuffer-1.png
(161.02 KB, 下载次数: 22)
下载附件
2015-2-4 23:41 上传
作者:
duxubo
时间:
2015-2-5 11:40
//StringBuffer s4
StringBuffer s = new StringBuffer("helloworld");
System.out.println("s:"+s);//S在缓冲区
String ss = s.toString();//底层调用StringBuilder.append方法"helloworld"存在缓冲区
System.out.println("ss:"+ss);
String s2 = "helloworld";//在常量池
System.out.println("s2:"+s2);
System.out.println("ss==s2:"+(ss==s2));
String sss = "helloworld";//在常量池
System.out.println("sss:"+sss);
System.out.println("s2==sss:"+(s2==sss));
字符串底层操作不同
作者:
phil
时间:
2015-2-5 11:54
来学习一下,加油!!
作者:
java小兵
时间:
2015-2-5 21:04
StringBuffer ss = new StringBuffer(“helloworld”);
String ss = s.toString();
这个StringBuffer的tostring相当于创建了一个新对象。跟一般的tostring有点不同。
作者:
Never、saydie
时间:
2015-2-5 22:27
只知道StringBuffer在输出的时候,偶人调用了.toString()方法
作者:
Julie
时间:
2015-2-6 01:35
你的编译器怎么那么像subtext啊
作者:
kenfine
时间:
2015-2-6 07:29
String s1="helloword";
String s2="helloword";
s1,s2指向的是同一个字符串常量池中的对象"helloword"。
String s3=new String("helloword");
String s4=new String("helloword");
这个构造函数在API中的解释是:
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
所以s3和s4的指向不同!
至于
StringBuffer s = new StringBuffer("helloworld");
String ss = s.toString();
JDK这个方法是:
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
复制代码
显然,这个是重新new了一个字符串对象出来的
作者:
kfcka
时间:
2015-2-6 09:02
第一个SS==S2为false 是因为ss是在字符串缓冲区,而第二个s2是在常量池,自然返回false
第二个S2==S3为true,是因为两个都在常量池,常量池已有的字符串,是不会再重新新建,指向同一个地址
作者:
lwh316658735
时间:
2015-2-6 19:09
StringBuilder的toString()方法里返回的是一个new String();
所以他和后面直接声明的String sss 不是同一个对象,所以用==比较是会返回false
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2