public class Test02 {
public static void process(String str) {
str="A";
}
public static void process(StringBuffer sb) {
sb=new StringBuffer();
sb.append("A");
}
public static void process(String str ,StringBuffer sb) {
str=new String("A");
sb.append("A");
}
public static void main(String[] args) {
String str="a";
StringBuffer sb=new StringBuffer("a");
process(str);
System.out.println(str);
process(sb);
System.out.println(sb);
process(str, sb);
System.out.println(str);
System.out.println(sb);
}
}
我也是java,你这个主要是你没区分开局部变量和全局变量的区别。还有一个就是StringBuff类的append方法的作用原理,这个方法的作用原理主要是指针那里的,所以你最后一个输出结果是aA,而String类的+=或者new String()都相当于创建一个副本重新赋值,所以你输出后看到的结果还是你自己定义的时候给定的结果
public class r {
public static void process(String str) {
//局部变量
str = "A";
}
public static void process(StringBuffer sb) {
// sb = new StringBuffer();
// sb.append("A");
sb.append("A");
}
public static void process(String str, StringBuffer sb) {
//局部变量
str = new String("A");
// 指针变化
sb.append("A");
}
public static void main(String[] args) {
// 初始值str
String str = "a";
// 初始值sb
StringBuffer sb = new StringBuffer("a");
process(str);
// 这里输出的是初始值str,不是你方法中的str
System.out.println(str);
process(sb);
// 这里输出的是初始值sb,不是你方法中的sb
System.out.println(sb);
process(str, sb);
System.out.println(str);
// 这个sb因为是直接使用的append方法,没有创建新的副本,所以这个值在原来的基础上加上你后面的赋值
System.out.println(sb);
}
}
谢谢
传值和传址的问题吧
建议给代码加上高亮并说明一下所用编程语言
– dudu 6年前