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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王杰 黑马帝   /  2012-3-8 10:19  /  2230 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 苳眠 于 2012-3-8 10:20 编辑

    有些人说对象是“按引用”传递的,这是不正确的。在编程语言设计中,术语“引用传递”(pass by reference)真正的含义是引元传递给函数时,被调用的函数获得的是对原值的引用,而非原值的副本。如果函数修改了其参数,那么调用代码中的值也将发生改变,这是因为引元和参数使用了内存中的同一块地址。……java语言并不按引用来传递对象,而是值传递对象。因为同一个引用的两份副本指向的都是同一个实际对象,所以通过一个引用变量所做的修改可以被另一个引用观察到。准确地讲,java只有一种参数传递方式,即值传递,这么做有助于保持简单。———————《The Java Programming Language》(Fourth Edition) Author : Ken Arnold , James Gosling , David Holmes

今天看书的时候发现的,我原来的时候一直认为对象是引用传递。现在通过以上的讲解才明白,其实我们不能因为对象是一种引用数据类型而说对象是引用传递!术语中的引用传递可不是这样的意思。
我们在一个函数中如果传入的参数是一个对象的话,其实,我们传入的是某个对象在堆内存中的地址值!对象在储存时,是在栈内存中有一个引用类型的声明,在堆内存中有对象的实例,声明的引用类型指向堆内存中的对象实例。我们在传递的时候是值传递!传递的是声明引用类型,而声明的引用类型就是一个地址值!
    你过去是不是也有过这样的误解呀。现在明白了吧!

该贴已经同步到 苳眠的微博

评分

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

查看全部评分

2 个回复

倒序浏览
帮顶,学习了
回复 使用道具 举报
是这么回事,传送门 http://bbs.itheima.com/forum.php ... amp;page=1#pid43434

相当于你传递的是地址的副本,如果单纯的把副本改变了,地址原址是没有变的,但因为地址的副本和原本指向的内容是一样的,所以改变副本指向的内容,原本指向的内容也会跟着改变。

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

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