当前位置: 代码迷 >> J2SE >> Java中传参和传值的区别解决办法
  详细解决方案

Java中传参和传值的区别解决办法

热度:62   发布时间:2016-04-24 12:44:42.0
Java中传参和传值的区别
两段代码,思路大体是一样的但是输出结果却不同:

第一段:
Java code
public class DHCC extends Another{    public static void diandao(int[] a)    {            int l = a.length;        int half = l/2;        int tmp;                for(int i=0;i<half;i++)        {            tmp = a[i];            a[i] = a[l-i-1];            a[l-i-1] = tmp;        }    }        public static void main(String[] args) {        int [] a = {1,2,3,4,5,6,7,8,9};        diandao(a);        for(int i=0;i<a.length;i++){            System.out.print(a[i]+" ");        }    }}


这段代码是将一个为{1,2,3,4,5,6,7,8,9}的数组传入diandao()函数中进行倒序排列,运行以后的输出结果是9 8 7 6 5 4 3 2 1 实现了倒序;

第二段代码:

Java code
public class Another{    public static void diandao(String str){        str = "kkkk";    }        public static void main(String[] args){        String str = "lllll";        changeString(str);        System.out.println(str);    }}


这段代码将一个为"lllll"的字符串传入diandao()中,输出应该是"kkkk"吧,为什么还是 "lllll" 呢?我都对这参数传递方式有点迷糊了,哪位能帮我解释一下,多谢了哦

------解决方案--------------------
Java code
public class Another{    public static void diandao(String str){        str = "kkkk";    }        public static void main(String[] args){        String str = "lllll";        changeString(str); /* 这是什么函数?写错了吧*/        System.out.println(str);    }}
------解决方案--------------------
java中只有传值的方式,对于数组来说,引用和原型指向同一块内存,所以通过方法可以改变数组的值,而对于String来说,引用和原型指向不同的内存,所以改变引用并不改变原始的String的值,StringBuffer可以
------解决方案--------------------
最简单的区别办法就是:我一眼就能看出来
这段代码将一个为"lllll"的字符串传入diandao()中,输出应该是"lllll" 是引用传递,不是值传递
为什么? 传的参数是对象类型或是数据,那一定是 引用传递
说说下概念:
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值
引用传递:也称地址传递,方法调用时,实际参数的引用(地址,而不是参数值)被传递给方法中的形式参数,在方法执行
中对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数的值的改变将会影响实际参数的值。
------解决方案--------------------
引用传参和值传参(简单来说):
值传参 是将copy一份,是两个不同。
引用: 是将地址传过去, 是同一个。
  相关解决方案