public class Foo { public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b); }
static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}打印的结果是:AB,B
public class Foo { public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
a.append(b);
b=a;
System.out.println(a+","+b); }
}
打印结果却是: AB,AB 这是为什么呢?
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b); }
static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}打印的结果是:AB,B
public class Foo { public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
a.append(b);
b=a;
System.out.println(a+","+b); }
}
打印结果却是: AB,AB 这是为什么呢?
static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;}
这里你不过是把对象X的引用值传递给Y,而不是像下面的
a.append(b);
b=a;
直接是b的引用值传递给a,所以
上面的例子中,b的值并没有改变
下面的b确有改变,不知道这样说,楼主明白么
这个y只是方法的局部变量,不能带到方法外(当然改变对象y的属性值除外。)。
所以a=AB
而b依然是B。2.操作于对象a,再将a赋予对象b。
a,b对象一样。所有同样输出AB
1.方法不能修改基本数据类型。
2.方法不能实现让一个引用引用一个新的对象。第二条的原因就是上面所说的。
关于方法参数在Horstmann的《Core Java》第八版卷一第115页有详细论述。
StringBuffer b=new StringBuffer("B");
a.append(b);
b=a;这个是把A后面继续添加个B,所以a的值为AB,
最后a把值又赋给了b,所以b就和a的值一样了。都成AB了。
而第一个是引用值。
所以在operator中append方法是将字符串进行累加
虽然y=x;但是在调用operator方法的时候,你没有用一个变量去接收y的值
所以y的值在方法中变了,也就是引用变了,而实际的值没有改变
故打印AB,B而第二个例子是在调用了append方法后
a的值为AB对吧?然后,接着把a的值赋给b了
所以b的值就是AB了。
对象的地址和基本数据类型都存在栈(stack)中;对象实体存在于堆(heap)中。
x.append(y);
y=x;
}
楼主请听解释:
a,b的值传进operator后,有x=a,y=b,即x指向a所指的对象,y指向b所指的对象。
x.append(y)这一步操作修改了x所指的对象的内容,即a的内容。
而y=x却没有修改b所指的对象。y仅仅是指向b所指对象的一个引用 ,执行y=x操作只是让y这个引用指向其他的对象,根本就没有对原来指向的对象造成任何影响。