1 变量

基本数据类型(byte,short,int,long,float,double,char)对应的是变量,变量直接与数据值相关。在变量声明后,会在内存中开辟一块地址给这个变量,地址里的值,就是变量的值。变量的赋值都是值传递。

int a = 2;
int b = 3;
a = b;
b = 5;

此时 a = 3;

如下图:

a=b 操作会使得 a的值为b的值,即a 对应的地址里的值变为3。

b=5会修改b对应的地址里的值为5,与a没关系,a的值依旧为3。

java引用变量 java的引用变量_不可变对象

2 引用变量

数组(int[],char[]等等)和对象(String,自定义对象等等)对应的是引用变量,引用变量指向具体的地址,相当于一个别名。引用变量的赋值 只是 修改了指向的地址。

2.1 数组

int[] a = {1,2,3};
int[] b = {4,5,6};
a = b;
b[0] = 9

此时a = {9,5,6};

如下图:

a = b 的操作,使得a也指向了b所指向的地址,修改b指向的地址中的值,a对应的值也会改变。

java引用变量 java的引用变量_java_02

2.2 对象

对象可分为不可变对象(String)和可变对象。

2.2.1 不可变对象

一个一旦创建内容就不可改变的对象为不可变对象,不可变对象需要满足以下几种需求:
1、所有的数据域都是私有的;
2、没有修改器方法;即不能通过调用方法来修改对象的属性;
3、没有一个返回器方法,可以返回一个指向可变数据域的引用。
String对象就是一个不可变对象;

String a = "good";
String b = "nice";
a = b ;
b = "bad";

此时 a=nice;

如下图:

a= b使得a和b都指向了同一个属性是nice的String对象。

因为String对象是不可变对象,b="bad"不是将b指向的String对象的值改变了,而是新生成了一个值为bad的String对象,让b指向它。因此a的值不变。

java引用变量 java的引用变量_赋值_03

2.2.2 可变对象

假设Student是一个可变的对象,有一个public的属性 num;

Student a = new Student(11);
Student b = new Student(22);
a = b;
b.num = 33;

此时a.num = 33;
a=b使得a和b都指向了同一个属性num是22的Student对象。
因为Student对象是可变对象,b.num=33是将b指向的Student对象的值改变了。因此a的值也相应发生了变化。