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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a80C51 中级黑马   /  2015-9-1 22:29  /  341 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 a80C51 于 2015-9-1 22:31 编辑

方法的参数传递机制
只有一种:值传递,即将实际参数值得副本,传入方法内。
解释如下:
回归到一个最经典的错误:
publicclass hehe
{
    public static void swap(int a , int b)
    {
        int tmp = a;
        a = b;
        b = tmp;
        System.out.println("swap方法里,a的值是"
            + a + ";b的值是" + b);
    }
    public static void main(String[] args)
    {
        int a = 6;
        int b = 9;
        swap(a , b);
        System.out.println("交换结束后,变量a的值是"
            + a + ";变量b的值是" + b);
    }
}
分析:
实际上,在main方法调用swap方法时,main方法还未结束,故系统会分配两块栈区来处理数据。根据值传递定义,传递给swap的a和b的值,只不过是main方法的副本,故无论swap内部如何交换,都不会对main方法中的a,b有影响。


而如果采用引用型参数传递时,其运行的原理,也是值传递,只是它传递的是引用对象的地址。也就是说,无论是采用数组,还是对象,其都是在堆内存中划分一块区域用于存放对象或者数组本身。而在栈内存中,存放对该对象或数组的引用,即所谓的地址。故此种方法可以达到交换数据的目的。

代码如下

classDataswap

{

    int a;

    int b;

}

    public static void swapNums(Dataswap dw)

    {

        int temp;

        temp = dw.a;

        dw.a = dw.b;

        dw.b = temp;

    }


2 个回复

倒序浏览
第一种:






QQ图片20150901223303.png (4.45 KB, 下载次数: 0)

QQ图片20150901223303.png
回复 使用道具 举报

第二种:

QQ图片20150901223303.png (8.83 KB, 下载次数: 2)

QQ图片20150901223303.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马