本帖最后由 苳眠 于 2012-3-8 10:20 编辑
有些人说对象是“按引用”传递的,这是不正确的。在编程语言设计中,术语“引用传递”(pass by reference)真正的含义是引元传递给函数时,被调用的函数获得的是对原值的引用,而非原值的副本。如果函数修改了其参数,那么调用代码中的值也将发生改变,这是因为引元和参数使用了内存中的同一块地址。……java语言并不按引用来传递对象,而是值传递对象。因为同一个引用的两份副本指向的都是同一个实际对象,所以通过一个引用变量所做的修改可以被另一个引用观察到。准确地讲,java只有一种参数传递方式,即值传递,这么做有助于保持简单。———————《The Java Programming Language》(Fourth Edition) Author : Ken Arnold , James Gosling , David Holmes
今天看书的时候发现的,我原来的时候一直认为对象是引用传递。现在通过以上的讲解才明白,其实我们不能因为对象是一种引用数据类型而说对象是引用传递!术语中的引用传递可不是这样的意思。
我们在一个函数中如果传入的参数是一个对象的话,其实,我们传入的是某个对象在堆内存中的地址值!对象在储存时,是在栈内存中有一个引用类型的声明,在堆内存中有对象的实例,声明的引用类型指向堆内存中的对象实例。我们在传递的时候是值传递!传递的是声明引用类型,而声明的引用类型就是一个地址值!
你过去是不是也有过这样的误解呀。现在明白了吧!
该贴已经同步到 苳眠的微博 |