黑马程序员技术交流社区
标题:
基本数据类型和引用数据类型传递
[打印本页]
作者:
李玉杰
时间:
2012-1-3 19:33
标题:
基本数据类型和引用数据类型传递
本帖最后由 lyj749 于 2012-1-3 21:53 编辑
各位大侠,谁能简单解释一下传递规则,或者说是规律?怎么样好记?我在这里比较晕。。。
作者:
李盈科
时间:
2012-1-3 19:44
java中只有值传递 ,即为pass by value。例如 int a=5;do(a) 无论do这个方法里边做什么都不会改变一开始定义a的值,这就是值传递。
作者:
章春晓
时间:
2012-1-3 19:59
基本数据类型传递的是值,引用数据类型传递的是地址。
作者:
罗利民
时间:
2012-1-3 20:10
传递就是
基本数据类型传递的是值。
引用数据类型传递的是地址。
所以在方法里如果同时改变两个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)
改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据。所以方法结束后也会改变
举例说明
public static void main(String[] args){
int a=1;
int[] nums={1,2};
change(a);
change2(nums);
System.out.println(a);
System.out.println(nums[0]);
}
public static void change(int a){//此时a是形参
a=100;//形参值改变。main()方法中的a还是1
}
public static void change2(int[] nums){
nums[0]=100;
}
则最后的结果是 1,100
作者:
颜宗茂
时间:
2012-1-3 21:45
基本数据类型传递的是值,引用数据类型传递的则是该引用对象的地址了。
作者:
林晓波
时间:
2012-1-3 21:53
基本数据类型传递的是值。
引用数据类型传递的是地址。
所以在方法里如果同时改变两个个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)
改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据。所以方法结束后也会改变
引用数据类型与基本数据类型的共同点在于都需要声明,都可以赋值。不同点在于:存储单元的分配方式不同,两个变量之间的赋值方式也不同。
(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];只是基本类型之间的赋值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2