Java方法的参数是按值传递的.
来源:互联网 发布:wifi网络 编辑:程序博客网 时间:2024/06/15 11:23
在Java中,所有的方法参数,都是"按值传递".
有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是
Java中基本类型将值作为参数,按值传递.对象将引用作为参数,按值传递.
所谓按值传递,就是传递的是一个副本.
现在来解释下Java方法传递引用时的情况.
比如说有一个引用 Body body = new Body(.....);
将body当作参数传递的时候,传递的不是body指向的对象,也不是body引用本身,而是body的一个副本,并且这个副本和body是一模一样. 这里的一模一样就是body和副本指向同一个对象.
那么当body的副本进入方法后,对这个副本的修改同样会影响body.
但是如果进入方法后将body的副本指向其它对象的时候,那么和body是一点关系都没有了.
下面来看看程序就明白了.
- public class TestParam {
- public static void main(String[] args) {
- Body var1 = new Body(1);
- Body var2 = var1;
- doSomething( var2 );
- System.out.println( var1.a );
- System.out.println(var2.a);
- System.out.print(var1 == var2);
- }
- public static void doSomething(Body body) {
- body.a = 2;
- }
- }
- class Body {
- public Body(int a) {
- this.a = a;
- }
- int a;
- }
输出的结果是:
2
2
true
这个结果不难理解.
再看一个
- public class TestParam {
- public static void main(String[] args) {
- Body var1 = new Body(1);
- Body var2 = var1;
- doSomething( var2 );
- System.out.println( var1.a );
- System.out.println(var2.a);
- System.out.print(var1 == var2);
- }
- public static void doSomething(Body body) {
- body = new Body(2);
- }
- }
- class Body {
- public Body(int a) {
- this.a = a;
- }
- int a;
- }
输出的结果是
1
1
true
两个程序就是在参数进入方法体之后的处理有所区别.
针对第二个程序,画一个草图.
本文出自 “专栏:Paxos与ZooKeeper” 博客,请务必保留此出处http://nileader.blog.51cto.com/1381108/303501
0 0
- Java方法的参数是按值传递的
- Java方法的参数是按值传递的.
- Java方法的参数是按值传递的.
- Java方法的参数是按值传递的
- java 方法的参数传递
- Java方法的参数传递
- Java--方法参数的传递
- Java方法的参数传递
- Java方法的参数传递
- JAVA的方法参数传递
- java方法参数的传递
- JAVA 方法的参数是按值传递还是引用传递?
- Java方法参数的传递机制,值传递?引用传递?
- Java的方法参数的传递
- Java参数传递是按值传递的
- java里方法的参数传递
- java里方法的参数传递
- java里方法的参数传递
- 用NuGet.Server管好自家的包包
- KMP算法
- 雅鲁藏布大峡谷自助游
- 163的在线编辑器简析和配置使用
- 两个通用的产生一个编号字段的思路
- Java方法的参数是按值传递的.
- ThinkPHP3.1快速入门(19)文件上传
- 第七章:查找技术
- Nginx如何优化突破十万高并发
- 安装Tomcat8.0
- 使用存储过程实现进销存系统中的先进先出算法(1)——数据库与存储过程设计
- 使用存储过程实现进销存系统中的先进先出算法(2)——存储过程调用
- FRM-41839: Disk I/O error on temporary record buffer file /tmp/...TMP
- Maven最佳实践:划分模块