哪位大侠能告诉我为什么这段代码执行的结果是javajavac
public class Test {
public static void stringReplace(String text){
text=text+”c”;
}
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 class Test {
public static void stringReplace(String text){
text=text+”c”;
}
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);
}
}
text=text+”c”; textString=java text=javac 这里会新生成一个字符串对象
stringbuffer 不用说了吧 直接在原来的字符串后面加“c”
这一句过去的是引用类型还是值类型啊?我有点晕
引用 textString 和 text 都指向同一个对象 java
String textString = "java";
stringReplace(textString);
这样这个"java"的值是在字符串池中,我还想得通一点,但是现在的情况是我传的是一个引用类型,是堆里的内存地址啊
这个解释比较正确
因为最后那个stringReplace方法返回值是void,实际上你执行stringReplace(textString)的时候,对textString没有做任何更改,暂时的textString副本没任何意义。
而StringBuffer是可变类,所以在执行方法的时候,持有就是类似C语言里面的指针,因此能够改变StringBuffer。如果你想实现通过stringReplace方法来改变textString值,可以这样做public class Test {
public static void stringReplace(String text) {
text = text + "c";
}
public static String stringReplace2(String text) {
return text = text + "c";
} 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);
textString=stringReplace2(textString);
System.out.println(textString + textBuffer);
}
}