public class test {
public static void main(String[] args)
{
StringBuffer a=new StringBuffer("a");
StringBuffer b=new StringBuffer("b");
operate(a, b);
System.out.println(b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}}
为什么结果只输出一个b 而不是ab??
public static void main(String[] args)
{
StringBuffer a=new StringBuffer("a");
StringBuffer b=new StringBuffer("b");
operate(a, b);
System.out.println(b);
}
static void operate(StringBuffer x,StringBuffer y)
{
x.append(y);
y=x;
}}
为什么结果只输出一个b 而不是ab??
public static void main(String[] args) {
StringBuffer a = new StringBuffer("a");
StringBuffer b = new StringBuffer("b"); System.out.println(operate(a, b));
} static StringBuffer operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
return y;
}}
{
x.append(y);
y=x;
} 关键是这个方法,传进这个方法的是两个对象的引用,这个应该知道。
这个时候指向第一个对象的是变量a、x,指向第二个对象的是变量b、y。
然后在x上执行append,这是对对象的操作,所以字符串“b”加到了“a”的后面。
然后y=x,这个是变量的赋值,只是令y变量指向x变量所表示的对象,对主函数里的a、b变量没有影响。
x=y重赋值不可以
可以把这理解为传值。
形参是引用的拷贝只能操作对象,改变赋值不影响实参~
1:基本类型,传递这个基本类型的副本,不会改变被传递参数的值
2:对象类型,传递这个对象的值,因为java没有指针,所以仅仅可以改变参数的内部状态,不可以改变它的重新指向。
StringBuffer虽然是个对象,但其内部操作的是基本类型char,因此其作为参数传递时是不会改变值的。
希望能给你帮助!