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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

参数传递不是分为值传递和引用传递吗?Java中参数为对象时,是不是引用传递呢?

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

10 个回复

倒序浏览
java中传对象的话是引用传递,传入的是地址,如果是基本数据类型则是值传递!
回复 使用道具 举报 1 0
Java中参数为对象时,是把对象在内存中的地址拷贝了一份传给了参数,也就是把对象的引用传过去,如果引用的内容改变,那么原对象也跟着改变,如果传递的是基本数据类型,就是值传递,

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 赞一个!

查看全部评分

回复 使用道具 举报
duo935658701 发表于 2013-9-5 09:18
java中传对象的话是引用传递,传入的是地址,如果是基本数据类型则是值传递! ...

Java传对象传入的是地址,是个值,这是不是还是值传递啊?我看有些书上写的,在Java编程中不存在引用传递……这一点不是很明白……
回复 使用道具 举报
赵凯 发表于 2013-9-5 10:53
Java中参数为对象时,是把对象在内存中的地址拷贝了一份传给了参数,也就是把对象的引用传过去,如果引用的 ...

传递对象的引用,也就是传递一个地址,是个具体的数值,这个可不可以理解为是值传递?
回复 使用道具 举报
Michael_xpd 发表于 2013-9-5 11:16
传递对象的引用,也就是传递一个地址,是个具体的数值,这个可不可以理解为是值传递? ...

不可以,地址值不是固定的,值传递是不可以改变的
回复 使用道具 举报
楼主,你这样的理解是在抠字眼,关键是你对值得理解有点误区。
如果按照你对“值”的理解,那么所有在内存中分配的数据都是值,如果是这样的话,的确不存在引用传递。
但是我们说的值。应该理解为是对象被实例化是,分配到堆内存中的实际内容。
而其引用是在栈内存中的一个名称,指向了它在堆内存中的地址。

评分

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

查看全部评分

回复 使用道具 举报

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
传递基本数据类型时时值传递。
对象作为参数时是引用传递。
如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),即在方法调用时,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。

评分

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

查看全部评分

回复 使用道具 举报
前面的那位楼主概念讲得很详细。java中存在引用传递,如果参数是值类型,则传递的是值,形参的改变不会影响实参;参数为对象,则传递的是引用,形参和实参指向同一对象,即形参的改变会影响实参。用我之前写的一个例子来说明一下吧:
class Lian
{
        public static void main(String[] args) throws Exception
        {
                int[] arr=new int[]{9,5,6,8,4,7,2,1,3,0};
                print(arr);
                sort(arr); //arr是实参,与形参指向同一对象
                print(arr);
        }
public static void sort(int[] a)
        {//接收一个数组对象,传递的是数组对象的引用,a作为形参
                int temp;
                for(int i=0;i<a.length-1;i++)
                        for(int j=i+1;j<a.length;j++)
                                if(a[i]>a[j])
                                {
                                        temp = a[i];
                                        a[i] = a[j];
                                        a[j] = temp;
                                }
        }
        public static void print(int[] a)
        {
                for(int i=0;i<a.length;i++)
                {
                        System.out.print(a[i]+" ");
                }
                System.out.println();
        }
}
希望能助你理解!

评分

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

查看全部评分

回复 使用道具 举报
Michael_xpd 发表于 2013-9-5 11:14
Java传对象传入的是地址,是个值,这是不是还是值传递啊?我看有些书上写的,在Java编程中不存在引用传递 ...

赞成7楼的说法,引用传递的是地址,指针一样的东西,要根据地址找到相应的对象才能进行操作,而不是对地址进行操作;而值传递传过去的是真实的值,就是你要操作的那个值,你可以直接对其操作!

评分

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

查看全部评分

回复 使用道具 举报
楼主 你的问题如果解决了!



请把您的问题的"未解决"更改为"已解决"!



谢谢合作!


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