基本数据类型传递的是值。
引用数据类型传递的是地址。
所以在方法里如果同时改变两个个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)
改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据。所以方法结束后也会改变
引用数据类型与基本数据类型的共同点在于都需要声明,都可以赋值。不同点在于:存储单元的分配方式不同,两个变量之间的赋值方式也不同。
(1)基本数据类型的变量的传值赋值
基本数据类型的变量获得存储单元的方式是静态的,声明变量就意味着该变量占据了存储单元,变量保存数据值,两个变量之间赋值,传递的是值。例如
int i=0,j;
j=i;
j++;
结果是,i=0,j=1.
(2)数组变量的引用赋值
引用数据类型的变量获得存储单元的方式是动态的,必须用new运算符申请并动态获得存储单元。引用变量保存地址,长度,引用计数等特性。
数组是引用数据类型。一个数组变量保存一个数组的引用,即该数组占用的一块存储空间的首地址,长度及引用计数的特性。两个变量之间的赋值是引用赋值,传递地址等引用特性,没有申请新的存储空间。例如
int a[]={1,2,3,4,5},b[];
b=a; //引用赋值
b[1]=10;
b=a,使数组变量b也引用a拥有的数组,之后,通过数组b对数组元素的操作将同时改变数组a的元素值,通过数组变量b改变数组元素b[1]的值,实际上也改变了另一个数组变量a所引用的数组元素a[1]。
使用关系运算符(==、!=)能够判断两个数组变量是否引用同一个数组。例如
a==b; //结果为ture时,引用同一个数组
下面请看一段代码:
public class One {
public static void main(String[] args) {
int a[]={1,2,3,4,5},b[],c[];
c= new int[5];
c=a;
b=a;
System.out.println(a==b);
System.out.println(c==a);
}
}
输出结果为两个ture.而当把c=a;语句改为c[1]=a[1];时,则第二个输出就为false。因为数组中的元素是基本类型,所以c[1]=a[1];只是基本类型之间的赋值。
|