java值传递和引用传递举例
时间: 2024-12-20 19:16:29 浏览: 6
在 Java 中,函数参数的传递有值传递(Pass by Value)和引用传递(Pass by Reference)两种方式,但实际上 Java 的传参都是按值传递的,因为它的所有基本数据类型(如 int、char 等)和对象都是值传递。
**值传递示例(Java其实不是真的引用传递):**
```java
public void setValue(int x) {
// 参数x是副本,修改x不会影响原来的变量
x = 5;
}
int originalValue = 10;
setValue(originalValue); // 调用函数后,originalValue仍然是10,x只是临时改变了
System.out.println(originalValue); // 输出:10
```
**引用传递示例(虽然Java看起来像值传递,但实际上是引用的复制,对于对象则是引用):**
```java
public class Person {
public String name;
public void setName(Person p) { // 实际上是传递了Person对象的引用
this.name = p.name; // 修改p的name会影响原始对象
}
public static void main(String[] args) {
Person person1 = new Person();
person1.name = "Original";
Person person2 = person1; // 这里person2实际上是person1的引用
setName(person2); // 修改person2,实际上也改变了person1
System.out.println(person1.name); // 输出:"Modified"
}
}
```
在这个例子中,当我们传递 `person2` 给 `setName` 函数时,实际上是将 `person1` 对象的引用传递给了新的 `Person` 实例,所以改变 `person2` 的 `name` 会反映到 `person1` 上。
阅读全文