黑马程序员技术交流社区

标题: 基本数据类型和引用数据类型传递 [打印本页]

作者: 李玉杰    时间: 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