误区总是有人认为Java的赋值操作和传递参数操作都是passing by value和passing by reference。这很明显是错误的,在Java中只有 passing by value。众所周知,Java有两种数据类型结构:基本数据类型与引用数据类型。那么在赋值和传参自然也只会涉及到这两种。刨根究底,在内存中,基本数据类型的值是存在栈内存中的,而引用数据类型中,它的引用也是存在栈内存中的,但是这个引用指向的对象是存在堆内存中。存储方式不同,那么在赋值和参数传递中肯定会有一些不同。
赋值与参数传递
基本类型
对基本数据类型的赋值很简单,基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方.例如:对基本类型使用a=b ,那么b的内容就复制给了a.若接着又修改了a,b的值是不会受影响的。
引用类型
但是在为对象赋值的时候,情况却发生了变化,对一个对象进行操作的时候,我们真正操作的是对对象的引用。所以倘若将“一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到了另一个地方。倘若对对象使用c=d,那么c和d都会指向原本只有d指向的那个对象。
详解
例子1:
public class Solution {
private int a;
private int b;
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
}