zl程序教程

您现在的位置是:首页 >  后端

当前栏目

理解JAVA的传值方式

JAVA 方式 理解 传值
2023-09-11 14:16:12 时间

问题: Java的参数传递的是值还是引用?

我们经常会被问到这样的问题,当我调用某个方法时,通过参数传递过去的是变量本身,还是一个变量的复制品?问题的答案留到讨论后给出。


首先,你需要了解下java变量的分类:java中的变量分为

其中后面三种统称为引用类型,而基本类型分为三种,

boolean returnAddress

数字类型又分为

整数又有具体的内容,这里不再展开说明。其中,returnAddress是java虚拟机内部使用的类型,它被用来实现java程序中finally子句。这里主要看引用类型和基本类型数字类型情况(boolean类型的情况和基本类型一致).

先看参数为基本类型的情况:


上面的代码想通过swap交互a和b的值,在swap内部,变量a和b已经交换成功了,但在main中a和b的值依然是原来的值.

再看参数为引用的情况:


图1是swap未计算前的参数值,

图2是swap计算后的参数值.

从图中可以看出,swap的计算过程只能改变swap内部变量a和b的值,不能改变main中的a和b变量的引用值,换言之,参数的传递只能传值,不存在传引用一说.

请注意,上面我说不能改变a和b变量的引用值,可没说不能改变a和b指向的对象的值.再看下面的例子:


这个就是上面所说的,在swap内部的计算过程中,改变了main.a所指向对象的值.

就像下面的图所描述的那样:

但根本上,swap不能改变main中a和b的引用值.

另外贴一句sun公司官方文档上的描述这一问题的原话:

Java is always pass-by-value.when object is passed as a argument, be careful with that it is also the copy of reference

所以,现在你应该知道,java传递的只会是值,没有传递引用.

转载自 并发编程网 - ifeve.com
jsp中js使用jQuery封装好的 $.ajax()方法与服务器进行交互 var jsonStick = this.strtoJson();