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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

李贤

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 李贤 注册黑马   /  2012-4-13 18:16  /  1329 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java 到底是如何传递参数的?是by value或by reference?

3 个回复

倒序浏览
All parameters (values of primitive types, and values that are references to objects) are passed by value [JLS sect 8.4.1]。根据以上 Java规格文件的说法, 所有参数应该都是传值的(by value)。但实际上, 实际经验却告诉我们所有 Java 的对象都是传址的(by reference)。因此我们可以这样解释: 基本类型(如int, float, char等)是by value,而所谓“对象”(Object)则是by value of reference to object。
回复 使用道具 举报
基本类型作为参数传递的时候,传递的是值的副本,怎么改变这个副本,原值是不会变的。
同样,对象作为参数传递,传递的是引用的副本,既不是引用,更不是对象本身。
回复 使用道具 举报
Java 是传值还是传引用,问题主要出在对象的传递上,因为 Java 中基本数据类型没有引用。既然争论中提到了引用这个东西,为了搞清楚这个问题,我们必须要知道引用是什么。
简单的说,引用其实就像是一个对象的名字或者别名 ,一个对象在内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,我们不会直接是访问对象在内存中的数据,而是通过引用去访问。引用也是一种数据类型,我们可以把它想象为类似 C 语言中指针的东西,它指示了对象在内存中的地址——只不过我们不能够观察到这个地址究竟是什么。

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