您的位置:首页 > 编程语言 > Java开发

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

2014-09-29 22:27 741 查看
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为什么一样呢?我只是将结果运行出来了,求解释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐