传值还是传引用

原创 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说的精辟,这个问题其实说到底,如果你编译原理,汇编的基本功扎实,是不会存在任何问题和疑问的。

传值、传引用、传值

一、 函数参数传递机制的基本理论   函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用...
  • azhexg
  • azhexg
  • 2013年07月12日 15:20
  • 9406

关于C++中值传递和引用传递的总结

缺省情况下C++以值传递方式传递对象到函数。除非你另外指定,否则函数参数都是以实际参数的复件(副本)为初值,而调用端所获得的亦是函数返回值得一个副本。这些复件由copy构造函数产生,会造成昂贵的费时操...
  • f1520107395
  • f1520107395
  • 2013年12月25日 10:44
  • 1307

String参数是传值还是传递引用的测试

String参数是传值还是传递引用的测试      还是把测试拿来说说吧。。   public class StringTest {  public static void main(St...
  • u010930968
  • u010930968
  • 2015年07月14日 09:19
  • 724

Java中传值和传引用的区别

声明:此文是作为本人自己学习的心得与总结,同时也是与同学们进行交流,如果有错误的地方,希望同学们进行指正        在这里,要想搞清楚二者的区别,那么首先明白两个概念,“传值”、“传引用”。   ...
  • sunguoqingufo
  • sunguoqingufo
  • 2016年02月21日 14:26
  • 4375

PHP中对象传值还是传引用的问题

class Person{ public $name; public $age; } $p1 = new Person(); $p1->name = 'huang'; $p1->age = 99...
  • huang2017
  • huang2017
  • 2017年04月27日 14:35
  • 166

C++ 传值,传引用和传指针-参考Effective C++ 第三版Item20~21

拷贝构造函数 copy construtor  为什么有copy construtor? 函数的传参数有三种方式:传值,传引用和传指针。传值会产生对象的副本,而后两者是传的是对象的别名和对象的指针。...
  • dannyPolyu
  • dannyPolyu
  • 2013年09月12日 15:24
  • 768

golang传值和传引用

1.定义: b = a;b.modify();如果b的修改不会改变a的值,那么是传值;否则,是传引用 2.golang中大多数是传值的,有: 基本类型:byte,int,bool,string 复合类...
  • cyk2396
  • cyk2396
  • 2017年12月25日 16:07
  • 166

传值还是传引用(2) — C++

上一篇文章总结了java 参数传递方式。—(http://blog.csdn.net/clam_clam/article/details/6625837) 为了比较我在这里总结了C++ 的参数传递方...
  • clam_clam
  • clam_clam
  • 2011年08月04日 22:37
  • 2614

Java - 传值还是传引用?

只学Java的人自然是不会想到什么值和引用的问题的。但是每个从C++过来的人,都会问这个问题。那么Java倒底是传值还是传引用呢?网上众说纷纭,但大多是扯淡。 答案是: (1) 当参数为 bo...
  • iamshaofa
  • iamshaofa
  • 2012年06月29日 11:12
  • 828

传值还是传引用

  1     一个普遍的认识是:Java函数中的参数如果是简单类型,则传值;如果是Java对象,则传引用。其实,这是一个误解。 2     在Java中,函数都是都是传值。 3     一、对于简单...
  • java1573
  • java1573
  • 2007年04月25日 10:04
  • 453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:传值还是传引用
举报原因:
原因补充:

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