详解Java语言中的参数传递

时间:2017-09-21 编辑:冬蕊 手机版

  导语:和其它程序设计语言类似,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;

  1(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]);

  }

  }

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

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

  1.对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现;对于按值传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。

  示例代码

  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]);

  }

  }

  这样,程序的输出结果就将是:10 123 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的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。

[详解Java语言中的参数传递]相关文章:

1.java开发必会的Linux命令

2.Solaris iostat命令详解

3.Solaris线程模型详解

4.Linux文件查找命令find和xargs详解

5.2017计算机应用基础试题详解

6.2017年计算机二级考试JAVA上机试题【附答案】

7.2017计算机二级c语言知识点精选

8.2017计算机二级c语言题库及答案

9.2017年3月计算机二级c语言试题库及答案

10.2017计算机c语言二级考试题库及答案

详解Java语言中的参数传递相关推荐