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("a="+a+","+"b="+b);
b=a;
System.out.println("a="+a+","+"b="+b);
int i=7;
int j=9;
operate2(i,j);
System.out.println("i="+i+","+"j="+j);
StringBuffer d = new StringBuffer("Hello");
StringBuffer e = d;
e.append(", World");
System.out.println("d is : " + d);
System.out.println("e is : " + e);
}
public static void operate(StringBuffer x, StringBuffer y)
{
//y.append("t");
x.append(y);
y=x;
//y.append("0");
System.out.println("x="+x+","+"y="+y);
//return;
}
public static void operate2(int m,int n)
{
n=m;
System.out.println("m="+m+","+"n="+n);
}
}
输出:
x=AB,y=AB
a=AB,b=B
a=AB,b=AB
m=7,n=7
i=7,j=9
d is : Hello, World
e is : Hello, World
//what is the output?
//这题的答案是AB,B
//我不清楚为什么b的输出还是B?
解释:
/*
其实就是java对象池那一套
参数是一个指向同一个对象的引用
就是副本了,不过这个副本也指向原来的对象罢了
=操作只是切断参数这个新生成的引用指向原来的对象的指针罢了,原来的对象引用指向并没有改变
其实如果弄明白java对象池就更好理解了
*/