Java方法的参数是按值传递的
2011-12-22 17:47
267 查看
在Java中,所有的方法参数,都是"按值传递".
有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是
Java中基本类型将值作为参数,按值传递.对象将引用作为参数,按值传递.
所谓按值传递,就是传递的是一个副本.
现在来解释下Java方法传递引用时的情况.
比如说有一个引用 Body body = new Body(.....);
将body当作参数传递的时候,传递的不是body指向的对象,也不是body引用本身,而是body的一个副本,并且这个副本和body是一模一样. 这里的一模一样就是body和副本指向同一个对象.
那么当body的副本进入方法后,对这个副本的修改同样会影响body.
但是如果进入方法后将body的副本指向其它对象的时候,那么和body是一点关系都没有了.
下面来看看程序就明白了.
输出的结果是:
2
2
true
这个结果不难理解.
再看一个
输出的结果是
1
1
true
两个程序就是在参数进入方法体之后的处理有所区别.
针对第二个程序,画一个草图.
![](http://img1.51cto.com/attachment/201009/210130140.png)
有那么一种说法,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
两个程序就是在参数进入方法体之后的处理有所区别.
针对第二个程序,画一个草图.
![](http://img1.51cto.com/attachment/201009/210130140.png)
相关文章推荐
- Java方法中参数的传递问题总结
- java之给方法传递对象参数
- JAVA中方法参数的引用传递
- java方法的参数按值传递
- Java方法参数传递方式
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java 方法中参数传递
- 如果java中一个方法不知道要传递多少参数也不知道传递过来的是什么类型的数据你会怎么做?
- java面向对象入门之方法参数的传递
- java中方法的参数传递机制
- Java方法参数及其传递
- Java方法参数的传递机制 ,一片比较详细的文章
- 使用uploadify3.2.1 formData传递其他参数到后台,JAVA后台获取参数方法
- java方法(参数传递机制、实现值交换、形参不确定)
- JAVA的方法参数传递
- JAVA中方法的参数是按值传递的,有个例子很经典
- java返回多参数方法与方法的多参数传递
- Java方法参数传递
- Kotlin传递可变长参数给Java可变参数方法
- java方法参数传递方式