传值还是传引用

原创 2009年08月01日 14:00:00

碰到了很基本的一个问题,竟然把自己绕进去了,其实,还是基本功的不扎实。

 

我们都知道,对于一个java方法:

      swap(int a, int b){

             int temp = a;

             a = b;

             b = temp;

      }

如果在方法内部简单的交换a、b,在这个方法的外部,a和b在执行完swap后是不会被交换的,这个是最基本的常识,不用多说了.

如果是一个Object,在方法:

swap(Object a, Object b){

    int temp = a.i; // 假设a和b都有"i”这个属性

    a.i = b.i;

    b.i = temp;

}

那么a.i和b.i的值会被交换,可是,问题关键就在于,如果是如下这样一个方法,a和b会交换吗?代码如下:

swap(Object a, Object b){

    Object temp = a;

    a = b;

    b = temp;

}

结果呢?实际上a和b是不会被交换的,而我却还大言不惭的说会交换,哎,真丢人。

很佩服javaeye的buaawhl,对这个问题解释的很深刻:传入方法的参数实际上是“复制”了一份做“压栈”操作,此外,“.”是对内存操作,而“=”是赋值操作。http://www.javaeye.com/topic/12961?page=1http://dreamhead.blogbus.com/logs/2005/05/1189478.html

 

还是buaawhl说的精辟,这个问题其实说到底,如果你编译原理,汇编的基本功扎实,是不会存在任何问题和疑问的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java是传值还是传址引用

  • 2007-04-20 17:28
  • 52KB
  • 下载

Java到底是传引用还是传值?

问题: 如果Java是用引用来传递的话,为什么交换函数(swap)不起作用呢? 回答: 你的问题引出了Java新手的常犯的错误。事实上,一些老手也很难搞清楚这些概念。 Java确实使用对象的引用来...

Python 函数参数引用(传值 or 传址)copy和deepcopy

博文结构: 1、传值、传址的概念和区别 2、python 参数传递的方式 3、copy和deepcopy 的使用 4、python的数据存储方式传值、传址的概念和区别:传值:被调函数局部变量改...

一个实例介绍——java中的参数传递(传值、传引用)

java的学习之路总是bup

Java是传值还是传引用问题

Java是传值还是传引用

java传值与传引用的三种情况

基本数据类型传递的是值的拷贝;对象类型传递的是引用的拷贝;而String类型传递的虽然也是对象,但它不同于一般的对象类型,它String被设计为不可修改的类型,也就是对String对象的任何修改都将重...

关于Java对象作为参数传递是传值还是传引用的问题

前言  在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引...

Java传值传引用之浅显解析

Java的基本类型和引用类型的传值还是传引用
  • tseki
  • tseki
  • 2015-05-28 00:47
  • 219

Java传值与传引用

基本参数类型:传值 对象类型:传引用 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,...

Python 函数中,参数是传值,还是传引用?

在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码。 代码段1: def foo(a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)