java中的方法参数传递机制---值传递
2017-08-08 01:20
393 查看
一直以来,都被java中的参数传递方式都是 — 值传递。被这个说法搞的很糊涂。有时候传过去的值会发生变化,有的又不会,相信初学者会遇到这样的坑。今天就来说为啥会这样?
先来一段代码?
看下这两个输出是否一致?
第一个输出是 来自swap方法内的9,和6
第二个输出是 来自swap方法外的6,和9
为什么会出现不一样的结果呢?真相是main方法中调用的swap(6,9);将6,9作为实参传到形参中去,问题就出在这里。传过去的值其实是这俩个值的拷贝。就好比《西游记中》的孙悟空在要干架的时候,都是变出几个假孙悟空跟别人打。 这个也是道理。我传过去的值都是我的替身,你在swap中进行的一番折腾,其实都是改变的我的替身值,我真身没有丝毫变化。于是就出现了两个输出内容不一样的值。
这么写的话不好理解的话,那就看图帮助理解
这图看了之后应该不会有疑惑了?那么这个是基本类型的传值,那么传过去的是个引用类型的呢?那么值会发生变化 吗?
这个会出现什么情况呢?
来自swap方法内的9,和6
来自swap方法外的9,和6
为什么值会发生变化呢?难道不是用到了值传递的方式吗?
其实,敢肯定的是 他们用到了都是值传递的方式。 记得引用类型的引用变量存的是什么吗?引用变量存的是对象的地址。 所以将引用变量作为参数传过去,其实就是将对象的地址传过去。 这个好比 我将家里的地址告诉你,你去找这个地址,不就找到了我家(这个对象 )。然后你在我家(对象中)的各种操作不就会有影响产生。
看图
看到这个图,应该就会恍然大悟了吧。
真正明白了,java中的参数传值传值都是采用值传递方式。以后看见了着种情况不会再迷惑了吧。
本篇思路来源于《疯狂java讲义》
我只是大自然的搬运工。
先来一段代码?
/** * 值传递的演示 * @author hjm * */ public class TestDemo { public static void swap(int a,int b) { //用一个临时变量来存a的值 int temp = a; a = b; b = temp; System.out.println("来自swap方法内的"+a+",和"+b); } public static void main(String[] args) { int a = 6; int b = 9; swap(6,9); System.out.println("来自swap方法外的"+a+",和"+b); } }
看下这两个输出是否一致?
第一个输出是 来自swap方法内的9,和6
第二个输出是 来自swap方法外的6,和9
为什么会出现不一样的结果呢?真相是main方法中调用的swap(6,9);将6,9作为实参传到形参中去,问题就出在这里。传过去的值其实是这俩个值的拷贝。就好比《西游记中》的孙悟空在要干架的时候,都是变出几个假孙悟空跟别人打。 这个也是道理。我传过去的值都是我的替身,你在swap中进行的一番折腾,其实都是改变的我的替身值,我真身没有丝毫变化。于是就出现了两个输出内容不一样的值。
这么写的话不好理解的话,那就看图帮助理解
这图看了之后应该不会有疑惑了?那么这个是基本类型的传值,那么传过去的是个引用类型的呢?那么值会发生变化 吗?
public class TestDemo02 { public static void swap(DataSwap ds) { int temp = ds.a; ds.a = ds.b; ds.b = temp; System.out.println("来自swap方法内的"+ds.a+",和"+ds.b); } public static void main(String[] args) { DataSwap ds = new DataSwap(); ds.a = 6; ds.b = 9; swap(ds); System.out.println("来自swap方法外的"+ds.a+",和"+ds.b); } } class DataSwap{ //成员变量不用赋初值,但最好还是赋比较好 int a; int b;
这个会出现什么情况呢?
来自swap方法内的9,和6
来自swap方法外的9,和6
为什么值会发生变化呢?难道不是用到了值传递的方式吗?
其实,敢肯定的是 他们用到了都是值传递的方式。 记得引用类型的引用变量存的是什么吗?引用变量存的是对象的地址。 所以将引用变量作为参数传过去,其实就是将对象的地址传过去。 这个好比 我将家里的地址告诉你,你去找这个地址,不就找到了我家(这个对象 )。然后你在我家(对象中)的各种操作不就会有影响产生。
看图
看到这个图,应该就会恍然大悟了吧。
真正明白了,java中的参数传值传值都是采用值传递方式。以后看见了着种情况不会再迷惑了吧。
本篇思路来源于《疯狂java讲义》
我只是大自然的搬运工。
相关文章推荐
- Java方法参数的传递机制,值传递?引用传递?
- java中方法的参数传递机制
- 我的Java开发学习之旅------>Java语言中方法的参数传递机制
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- 【Java基础】12、java中方法的参数传递机制
- Java 方法参数的值传递和引用传递
- java 方法中参数是值传递还是引用传递
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- Java中方法的参数传递机制
- 深入理解Java中方法的参数传递机制
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java基础——方法参数的值传递机制
- java方法(参数传递机制、实现值交换、形参不确定)
- java中的方法参数的传递机制
- Java方法参数的传递机制 ,一片比较详细的文章
- Java方法的参数传递方式为: 值传递
- Java方法的参数传递机制
- java的方法调用,参数是按值传递还是按引用传递
- java中方法的参数传递机制
- 关于java方法参数是值传递还是地址传递。