Java引用传递和值传递

139 阅读1分钟

在 Java 中,参数传递也可以是值传递(pass by value)或引用传递(pass by reference)。

  1. 值传递(pass by value):

在值传递中,函数或方法接收的是原始数据类型或对象引用的副本,对参数进行修改不会影响原始变量的值。

public static void modifyValue(int num) { num = 42; } 
int value = 10; modifyValue(value); 
// value 的值仍然是 10,没有改变

在上述示例中,modifyValue() 方法接收一个整数参数 num,并将其修改为 42。然而,在方法调用后,原始变量 value 的值仍然是 10,因为方法内部的修改只作用于参数的副本。

  1. 引用传递(pass by reference):

在引用传递中,函数或方法接收的是对象引用的副本,但指向相同的对象。对参数的修改会直接影响原始对象的值。

public static void modifyReference(StringBuilder str) {
    str.append("World"); 
    } 
    StringBuilder sb = new StringBuilder("Hello");
    modifyReference(sb); 
    // sb 的值现在是 "HelloWorld",被修改了

在上述示例中,modifyReference() 方法接收一个 StringBuilder 对象引用作为参数,并追加字符串 "World"。在方法调用后,原始对象 sb 的值变为 "HelloWorld",因为方法直接修改了原始对象的值。

需要注意的是,在 Java 中,不像一些其他语言那样提供显式的引用传递。即使在引用传递的情况下,仍然是将引用的副本传递给方法或函数,但可以通过操作引用指向的对象来实现对原始对象的修改。这就是为什么 Java 被认为是按值传递的语言,无论是传递原始数据类型还是引用数据类型。