话不多说直接上代码
public class test {
public static void main(String[] args) {
String A = new String("java");
StringBuffer B = new StringBuffer("java");
st(A);
sb(B);
System.out.println(A + B);
}
public static String st(String st) {
st.replace("j", "1");
return st;
}
public static void sb(StringBuffer sb) {
sb.append("c");
}
}
st()方法修改字符串并返回,结果会是1avajavac吗?
答案是:javajavac,为什么呢?
这是因为,尽管return了结果值,但是最初初始化A时的那个对象依然不变。不管st()方法怎么改依然不会对A有影响。你可以这样理解:只要不对A进行=(赋值)操作,A的值是不会变化的,随便你st()方法怎么浪。
在对上面方法进行修改:
public class test {
public static void main(String[] args) {
String A = new String("java");
StringBuffer B = new StringBuffer("java");
A = st(A);
sb(B);
System.out.println(A + B);
}
public static String st(String st) {
st.replace("j", "1");
return st;
}
public static void sb(StringBuffer sb) {
sb.append("c");
}
}
看清楚了啊,main方法中,小便将st方法的值重新赋给了A,这次输出结果呢?
答案还是javajavac 。为什么?明明返回值已经赋给A了啊???
其实这次的你掉进了st()方法中的坑了。仔细想想return sb返回的st值是多少呢?java!还是那个原理啊,因为st.replace(“j”, “1”)虽然replace成功了,但是st本身还是初始化的st啊,replace的结果又生成了一个新的"st"。所以返回值仍然是java。
public class test {
public static void main(String[] args) {
String A = new String("java");
StringBuffer B = new StringBuffer("java");
A = st(A);
sb(B);
System.out.println(A + B);
}
public static String st(String st) {
st = st.replace("j", "1");//这样就容易理解了
return st;
}
public static void sb(StringBuffer sb) {
sb.append("c");
}
}
这次输出结果就是:1avajavac 了