public class Test028{
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b); //为什么在方法里b变为AB,而在输出却是B呢?
}
public static void operate(StringBuffer x, StringBuffer y){
x.append(y);
System.out.println("x= "+x);//输出AB
y=x;
System.out.println("y= "+y);//输出AB
}
}
将a和b的参数传递给operate方法,因为a和b都是对象,方法可以改变对象的属性,在方法中,a通过append()改变了,变为AB,而y=x; 这句也将对象b的值改变了啊,方法结束后,对象的属性应该都是被改变的,为什么在System.out.println(a+","+b); 后,输出的却是AB,B呢???
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b); //为什么在方法里b变为AB,而在输出却是B呢?
}
public static void operate(StringBuffer x, StringBuffer y){
x.append(y);
System.out.println("x= "+x);//输出AB
y=x;
System.out.println("y= "+y);//输出AB
}
}
将a和b的参数传递给operate方法,因为a和b都是对象,方法可以改变对象的属性,在方法中,a通过append()改变了,变为AB,而y=x; 这句也将对象b的值改变了啊,方法结束后,对象的属性应该都是被改变的,为什么在System.out.println(a+","+b); 后,输出的却是AB,B呢???
a与 StringBuffer x,b与StringBuffer y指向同一个对象,
x.append(y);这时候这个对象变为"AB", y=x这一步y也指向了"AB"这个对象,但注意此时b与y指向的就不是同一个对象了,b指向的还是原来的“B”这个对象。
在Java里,没有象C和C++那样的指针。用new创建一个对象的时候,就会获得一个引用
http://www.huihoo.com/java/c++_java.html
呵呵,不能简单的理解成是引用传递。应该说是传递的是地址的副本。先不考虑String,
class A1 { int t = 0;
}
public class Exam { A1 a1= new A1();
private void change(A1 param){
param.t = 10;
}
private void change2(A1 param){
param = new A1(); //地址改变
param.t = 100;
}
public static void main(String[] args){
Exam eg = new Exam();
eg.a1.t = 5;
System.out.println(eg.a1.t);
eg.change(eg.a1);
System.out.println(eg.a1.t);
eg.change2(eg.a1);
System.out.println(eg.a1.t);
}}, 最后说String,由于它是一个只读类,所以举例如下:String str = "abc";//生成一个对象
str = "abc"+"def"; //str的地址改变了,重新生成一个对象内容为"abc"+"def"
//然后把该地址赋给str,结合上边例子,应该讲清楚了吧