快速业务通道

Java语言中的参数传递 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

Java语言中的参数传递

时间:2011-02-05 csdn 陈跃峰

在实际的开发过程中,方法调用是一种很常见的操作,在方法调用中,关于参数的处理可能很多进行实际开发的程序员都不一定理解的很清楚,下面系统的介绍一下Java语言中参数传递的规则,以及和参数传递相关的一些问题。

和其它程序设计语言类似,Java语言的参数传递也分为两种:

1、按值传递(by value)

适用范围:8种基本数据类型、String对象

特点:在内存中复制一份数据,把复制后的数据传递到方法内部

作用:在方法内部改变参数的值,外部数据不会跟着发生改变

2、按址传递(by address)

适用范围:数组、除String以外的其他所有类型的对象

特点:将对象的地址传递到方法内部

作用:在方法内部修改对象的内容,外部数据也会跟着发生改变

基础示例代码:

public class Test1{   public static void t1(int n){     n = 10;   }   public static void t2(String s){         s = "123";   }   public static void t3(int[] array){     array[0] = 2;   }   public static void main(String[] args){       int m = 5;     t1(m);     System.out.println(m);     String s1 = "abc";     t2(s1);     System.out.println(s1);       int[] arr = {1,2,3,4};     t3(arr);     System.out.println(arr[0]);   }   }

按照上面的参数传递规则,该代码的输出结果应该是:5abc2。因为int类型是按值传递,所以把参数m传递到方法t1时,相当于又复制了一份m的值,在方法t 1内部修改的是复制后的值,所以m的值不变,s1的输出和m类似。而arr是数组,属于按址传递,也就是把arr的地址传递到了方法t3内部,在方法t3内部修改数组中的值时,原来的内容也发生改变。

Java语言中的参数传递(2)

时间:2011-02-05 csdn 陈跃峰

以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:

1、对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现。

2、对于按值传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。

示例代码如下:

public class Test2{   public static int t1(int n){     n = 10;     return n;   }   public static String t2(String s){           s = "123";          return s;   }   public static void t3(int[] array){     //创建新的数组并赋值     int[] newArray = new int[array.length];     //数据拷贝    System.arraycopy(array,0,newArray,0,array.length);     newArray[0] = 2;   }   public static void main(String[] args){           int m = 5;     //重新赋值     m = t1(m);     System.out.println(m);     String s1 = "abc";     //重新赋值     s1 = t2(s1);     System.out.println(s1);           int[] arr = {1,2,3,4};     t3(arr);     System.out.println(arr[0]);   } }

这样,程序的输出结果就将是:10123  1。

在实际的程序开发中,可以根据需要使用类似的结构来进行实现。

下面再介绍一个参数传递的常见应用,利用参数传递实现返回值,这样的功能在IO类设计的read方法中大量使用。示例代码如下:

public class Test3{   public static void initArray(int[] array){           for(int i = 0;i < array.length;i++){                array[i] = i;     }   }   public static void main(String[] args){           int[] a = new int[10];     initArray(a);     for(int i = 0;i < a.length;i++){                System.out.println(a[i]);     }   } }

在该示例代码中,在initArray方法内部修改了数组的值以后,外部数组a的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。

因时间仓促,疏漏之处难免,请大家积极补充和指正。

出自:http://blog.csdn.net/Mailbomb/archive/2007/12/31/2006042.aspx

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号