21xrx.com
2024-12-22 22:34:40 Sunday
登录
文章检索 我的文章 写文章
Java中的值传递与引用传递的区别及案例分析
2023-06-12 00:14:20 深夜i     --     --
Java 值传递 引用传递 代码案例

Java编程语言中,很多初学者都会有类似“Java没有引用传递,只有值传递”的困惑。那么,这句话是真的吗?

首先,我们需要了解一下Java中的值传递和引用传递。值传递就是将实际参数的值传递给形式参数,而引用传递则是将实际参数的地址传递给形式参数。具体的区别我们可以通过以下案例来理解。

案例一:值传递


public class Test {

  public static void change(int i, int j)

    int temp = i;

    i = j;

    j = temp;

  

  public static void main(String[] args) {

    int a = 1;

    int b = 2;

    change(a, b);

    System.out.println("a=" + a + ",b=" + b);

  }

}

执行上述代码后,我们可以发现输出结果为:“a=1,b=2”。这是因为在change()方法中,i和j这两个形式参数分别获得了a和b的值,而在方法内部交换i和j的值并不会改变a和b的值。因此,值传递只是将a和b的值复制给了i和j,此时i和j是独立的变量,与a和b没有任何关联。

案例二:引用传递


public class Test {

  public static void change(int[] arr) {

    int temp = arr[0];

    arr[0] = arr[1];

    arr[1] = temp;

  }

  public static void main(String[] args) {

    int[] arr = 1;

    change(arr);

    System.out.println("arr[0]=" + arr[0] + ",arr[1]=" + arr[1]);

  }

}

执行上述代码后,我们可以发现输出结果为:“arr[0]=2,arr[1]=1”。这是因为在change()方法中,arr数组作为实际参数,其地址被传递给了形式参数。此时形式参数和实际参数指向了同一块内存空间,因此在方法内部修改arr[0]和arr[1]的值也就等同于修改了原数组的值。

综上所述,Java中确实只有值传递,而没有引用传递。但是对于类、数组等引用类型变量的传递,其实是将其地址通过值传递的形式传递给了形式参数,因此在方法内部操作这些引用类型变量也可以改变其原有的值。这就是很多人口中的“Java中的引用传递”。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复