锁定老帖子 主题:Java中 引用调用 VS 按值调用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-17
貌似大多数的初学者对java中函数的调用是按照"引用调用"还是"按值调用"存在一定的误区。这些调用方式,表述了编 程语言如何管理向函数(function)或方法传入的参数,归根到底,是要理解java如何管理参数的传递。 按值调用意味着被调用的函数在幕后对参数进行了拷贝,函数中的代码操作的是这个拷贝,意味着对参数进行的任何改 动,都会在函数执行完毕后被丢弃掉,原因是你所做的改动只作用于局部的拷贝,而非传入的参数,参数的拷贝只在方法范围 内有效,当超出方法的执行范围后,那局部的拷贝的作用域也只限于方法的范围内。 按引用调用意味着函数操作的和传入的参数,在物理上是相同的,由于两个引用指向的是堆中的同一个对象,对参数任 何改动都会被保存下来。
用的方式进行的,下面的代码显示了java中对基本类型的按值调用的方式的处理结果。 java 代码
执行结果: java 代码
后count保存的还是原来的值。
建了一个新的指针指向同样的内存位置,如果你在调用的方法的内部,将一个新的内存地址(也就是一个不同的对象)赋值给这个 引用,新的地址在方法执行完后同样会被丢弃。对引用方法的调用导致该引用所指向的对象的状态的永久性的改变。 java 代码
个引用执行的操作将直接反应在堆的对象上,接着创建了一个新的Customer对象,将它的地址赋给customer参数引用,然后 返回customer引用,此时它指向的是堆中ID为22的那个Customer对象,最后打印结果如下: java 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-20
java里的所有基本类型都是按值进行传递的,所有对象都是按引用进行传递的,不过有一个例外就是String对象,由于它是终态的,所有虽然是按引用传递,但是修改的时候是生成一个新的字符串的!
|
|
返回顶楼 | |
发表时间:2007-11-21
String对象并不例外,这只是他的特性,你可以自己写一个不可改变的对象来成为你所谓的例外的对象。
|
|
返回顶楼 | |
发表时间:2007-11-27
cnng007 写道 String对象并不例外,这只是他的特性,你可以自己写一个不可改变的对象来成为你所谓的例外的对象。
我所说的例外就是因为java在设计String对象时所设置的特性,当然我说它是终态并不能正确的解释这个问题,因为终态是不允许进行修改的,应该是线程安全的。总之就是String虽然是引用传递,但是任何修改都导致新字符串的生成! |
|
返回顶楼 | |
浏览 3167 次