当前位置: 技术问答>java相关
关于String 、StringBuffer,先别运行,给个输出先,and WHY?
来源: 互联网 发布时间:2017-04-02
本文导语: public class Test11{ public static void StringReplace(String text){ text=text.replace('j','l'); } public static void buf...
public class Test11{
public static void StringReplace(String text){
text=text.replace('j','l');
}
public static void bufferReplace(StringBuffer text){
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
StringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
}
public static void StringReplace(String text){
text=text.replace('j','l');
}
public static void bufferReplace(StringBuffer text){
text=text.append("c");
}
public static void main(String args[]){
String textString=new String("java");
StringBuffer textBuffer=new StringBuffer("java");
StringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
}
|
javajavac
|
javajavac,java对对象的引用是这样的,如果在引用过程中对该对象的内部的改变是可以传递回原来对象的,但是如果对象改变了,它不可能传递回去,对stringbuffer的改变相当于对对象内部数据的改变,所以原来对象的内部数据也改变了,而java的string创建以后不再改变,任何改变其实是创建了一个新的string对象,新对象当然不会使原来的对象发生改变。类似的对类的引用也都是这样。
|
javajavac
String是immutable的(也就是不可改变的),所以进行函数调用的时候,他会重新生成一个String,所以在函数里进行的操作对String来说是没有效果的。
而StringBuffer就不同了,就是所谓的“引用“。对StringBuffer对象的操作(比如搂主程序中的append)。
String是immutable的(也就是不可改变的),所以进行函数调用的时候,他会重新生成一个String,所以在函数里进行的操作对String来说是没有效果的。
而StringBuffer就不同了,就是所谓的“引用“。对StringBuffer对象的操作(比如搂主程序中的append)。
|
sunni有道理!