A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李玉杰 黑马帝   /  2012-1-3 19:33  /  3381 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lyj749 于 2012-1-3 21:53 编辑

各位大侠,谁能简单解释一下传递规则,或者说是规律?怎么样好记?我在这里比较晕。。。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

5 个回复

倒序浏览
java中只有值传递 ,即为pass by value。例如 int a=5;do(a) 无论do这个方法里边做什么都不会改变一开始定义a的值,这就是值传递。

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
吴上储 + 1
李玉杰 + 3 很给力!

查看全部评分

回复 使用道具 举报
基本数据类型传递的是值,引用数据类型传递的是地址。

评分

参与人数 2技术分 +1 黑马币 +5 收起 理由
吴上储 + 1
李玉杰 + 5 赞一个!

查看全部评分

回复 使用道具 举报
传递就是
基本数据类型传递的是值。
引用数据类型传递的是地址。

所以在方法里如果同时改变两个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)
改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据。所以方法结束后也会改变

举例说明
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

评分

参与人数 2技术分 +1 黑马币 +7 收起 理由
吴上储 + 1
李玉杰 + 7 赞一个!

查看全部评分

回复 使用道具 举报
基本数据类型传递的是值,引用数据类型传递的则是该引用对象的地址了。

评分

参与人数 1黑马币 +3 收起 理由
李玉杰 + 3

查看全部评分

回复 使用道具 举报
基本数据类型传递的是值。
引用数据类型传递的是地址。
所以在方法里如果同时改变两个个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)
改变的只是形参
引用数据类型如果改变的话,他改变的是地址指向的堆中的数据。所以方法结束后也会改变
引用数据类型与基本数据类型的共同点在于都需要声明,都可以赋值。不同点在于:存储单元的分配方式不同,两个变量之间的赋值方式也不同。

    (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];只是基本类型之间的赋值。


评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马