我想问问,为什么我在stringbuffer里添加的参数,最后要用.tostring转化,比如:
stringbuffer st = new stringbuffer();
st.append("hello");
我添加的是字符串啊。那为什么最后还要用st.tostring()转化,为什么?用append("hello")添加的时候,字符串是不是被转化成对象了?到底是怎么回事,大家指点一下,先谢谢大家了
stringbuffer st = new stringbuffer();
st.append("hello");
我添加的是字符串啊。那为什么最后还要用st.tostring()转化,为什么?用append("hello")添加的时候,字符串是不是被转化成对象了?到底是怎么回事,大家指点一下,先谢谢大家了
String str="hello";
把这句话循环一万遍,
str=str+"world";StringBuilder sb=new StringBuilder("hello");
sb.append("world");
你会发现后都比前都快至少百倍以上。
// TODO Auto-generated method stub
StringBuilder sb=new StringBuilder("hello");
long t1=new Date().getTime();
for(int i=0;i<50000;i++)
sb.append("w");
System.out.println("StringBuilder->time:"+(new Date().getTime()-t1));
String str="hello";
long t2=new Date().getTime();
for(int i=0;i<50000;i++)
str=str+"w";
System.out.println("String ->time:"+(new Date().getTime()-t2));
}结果
StringBuilder->time:16
String ->time:10766
我知道他们之间效率有不同,但是我不知道为什么要用.tostring 转化
其中toString()的定义如下:
public synchronized String toString() {
return new String(value, 0, count);
}
可以不用.toString()啊StringBuffer sb = new StringBuffer("hello");
System.out.println(sb);
//结果
hello
你要用String的时候,当然要toString()一下
相信楼主应该知道String和Stringbuffer的区别了,但是我想问楼主 怎么知道stringbuffer 输出字符串的时候还要.toString()的?
1. st.append("hello"); 虽然参数是字符串,但是此方法返回值为StringBuffer,所以要想得到String类型,最简单的方法就是用toString()方法。具体见源码,如下:
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
2.System.out.println(sb); 的确可以这样写,并不是应为sb是String类型,而是因为String.out.println()方法具有重载性质,具体就不写了
各位似乎偏题了,我举个例子
---省略了类名跟main那些代码
StringBuffer st=new StringBuffer();
st.append("hello");
st.append("hellyee");
System.out.println(st.toString());
System.out.println(st);
其实你可以看见结果都是
---------
hellohellyee
hellohellyeest是一个StringBuffer对象,toString 是他的一个方法,用String类型返回个对象的序列。这其实只是人的习惯用法,就算你直接用println(st)也是可以的,因为println默认会把对象转换成String的。但是如果你运行以下代码:
StringBuffer st=new StringBuffer();
String st1;
st.append("hello");
st.append("hellyee");
st1=st;这个时候就会出现异常,因为 st1是String,st是StringBuffer两者不是同类型,不能赋值.这个时候就一定要用
st1=st.toString() 了。
其实它内部做了好多转换的工作,比如整数变成字符串等. 其实它的工作和sting1 + 2 + string2 + 2.3 + String3 + 'a' 是一样的,只不过stringbuffer的效率更高.
我覺得樓主要把Stringbuffer 與 String區分開來!1.Stringbuffer與String是不同的類,眾所周知:類型轉換時使用了(st.tostring())。2.你在stringbuffer添加參數時,是添加了字符序列(CharSequence),而不是字符串(String)!3.append("hello")方法,是將分割的字符序列,整合起來,但整合之後不是字符串(String),而是字符序列(CharSequence)。4.使用st.tostring(),則是將字符序列轉換成了字符串!5.最重要的是弄清楚字符序列與字符串區別,建議看看API文檔.