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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨雯雯 中级黑马   /  2012-12-23 18:36  /  1289 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨雯雯 于 2013-1-1 15:11 编辑

public class Test2 {

public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a+","+b);
}

static void operate(StringBuffer x, StringBuffer y){
x.append(y);
y = x;
}
}
我对值传递和引用传递还是有些模糊,请大虾帮忙讲一下这段代码值传递和引用传递的体现

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

vr.png (10.83 KB, 下载次数: 10)

vr.png
回复 使用道具 举报
在刚开始学习时,我对这两个也是不理解的,弄了挺久的时间才弄明白
下面说一下我对这两个的理解:
1、值传递:即是原来的一份拷贝,举个例子:我有张图片A,你向我要这张图片A,我将图片A复制一份给你,这时图片A就有了两份,不管你对那份拷贝怎么PS,都不影响我的那份图片A。下面通过一个例子来说明一下
        main(String args[])
        {
                int a = 10;
                System.out.println(a);//打印10
               
                //将a的一份拷贝传递给change方法,且在change方法中将拷贝改为100,但是不影响原来的a的值       
                change(a);
                System.out.println(a);//打印10
        }
        public static void change(int x)
        {
                x = 100;
        }

2、引用传递:操作的都是同一个资源。举个生活中的例子:n个人一台电脑(电脑就是共同资源),甲在电脑上安装了一个QQ,那么其他人在用电脑时都会发现电脑上安装了QQ。这就说明:资源被修改了,其他人都能知道

class Demo
{
        main(String args[])
        {
                Person p = new Person();
                p.count = 50;
                System.out.println(p.count);//打印50
               
                changePerson(p);//调用方法
                System.out.println(p.count);//打印1000
               
        }
        static void changePerson(Person obj)
        {
                obj.count = 1000;//改变对象内的count值为1000
        }
}
class Person
{
        int count;
}

总结:基本数据类型是值传递;数组,类,接口等是引用传递
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马