public class TestYinYong {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
//输出a,b的初值 :A,B
System.out.println(a + ","+b);
operate(a,b);
//输出a,b经过一定操作后(operator()方法)的值:AB,B
System.out.println("方法执行后输出:" + a + ","+b);
b=a;
//输出将a赋给b后的值:AB,AB
System.out.println("声明引用处赋值输出:" + a + ","+b);
}
private static void operate(StringBuffer a, StringBuffer b) {
a.append(b);
b=a;
//AB ,AB
System.out.println("方法执行过程赋值输出:" + a + ","+b);
}
}
以上代码输出结果如下:
A,B
方法执行过程赋值输出:AB,AB
方法执行后输出:AB,B
声明引用处赋值输出:AB,AB
在java中,关于对象的使用都是通过引用来实现的,引用实际上就是一个内存地址,我们说的对象a和对象b,变量a和变量b实际上就是一个引用变量指向一个内存地址,在这块内存地址上刚好储存的数据是对象而已。因此,a=b实际上就是将变量b的引用值(地址)赋给a变量,这么一来a和b都指向了原先b指向的对象,就是b的引用复制给了a。上述只是解释了在声明时,两个对象间赋值的结果。而如果在调用方法中,将这两个对象赋值后,在声明方法中输出的结果和没有赋值是一样的。我觉得应该是因为调用方法中,又重新想虚拟机申请了变量,声明中的b和方法调用中b不一样,但是a为什么一样呢?我只是将结果运行出来了,求解释。