JAVA中申请了两个对象,分别在调用方法和声明方法中把其中一个对象直接赋值给另外一个对象,运行结果,求原理。


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为什么一样呢?我只是将结果运行出来了,求解释。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值