理解JAVA的传值方式
问题: 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.comjsp中js使用jQuery封装好的 $.ajax()方法与服务器进行交互 var jsonStick = this.strtoJson();
相关文章
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
- 编程体系结构(01):Java编程基础
- 【JAVA】JSP中的session、cookie、application的区别和操作实例(菜鸟的理解方式解读)
- java 多线程并发 synchronized 同步机制及方式
- There was an unexpected error (type=Bad Request, status=400). Failed to convert value of type ‘java.
- Java集合常见面试题汇总
- java中byte数组与int类型的转换(两种方式)
- CSDN日报191016:Java纯干货分享:史上最全的JAVA工程师面试题汇总
- Java详解,java后端应届生面试题
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 【Java】WEB-INF目录与META-INF目录的作用
- Java正确URL解码方式:URLDecoder.decode
- Java中对象拷贝的两种方式
- url映射 ccf (Java正则表达式80分解法)
- 深入理解Java中的final关键字
- TypeScript 中export与import的用法,和Java的区别
- 浅析 JSch - Java实现的SSH通讯包:jsch作用、4种认证方式、如何配置免密登录、ssh公钥检查机制及3种选项、如何实现sftp文件传输、maven依赖及具体使用示例代码
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
- Java高手速成 | 对象-关系的映射、映射对象标识符与JPA API的级联操作
- java web中servlet、jsp、html 互相访问的路径问题
- 从零学Java(25)之 break语句详解
- Java的++自增
- 多种方式解决Java控制台报错 java.util.LinkedHashMap cannot be cast to.....
- 【Java 并发编程】一文详解 Java 中有几种创建线程的方式