【发布时间】:2013-09-08 17:35:51
【问题描述】:
“Java 是 pass-by-value”
-Java Language Specification
但是,有些事情让我感到困惑。请看我的例子
public class Main {
public static void main(String[] args) {
StringBuilder myBuilder = new StringBuilder("Michael");
editString(myBuilder);
System.out.println(myBuilder);
}
public static void editString(StringBuilder x){
x.append(" Ardan");
}
}
输出:
Michael Ardan
还有这个例子:
public class Main {
public static void main(String[] args) {
int myInt = 10;
editInt(myInt);
System.out.println(myInt);
}
public static void editInt(int x){
x ++;
}
}
输出:
10
我尝试阅读其他文章,都说 Java 始终是 pass-by-value。我做了一些测试场景。将这两个示例相互比较让我认为 Java 的对象是 pass-by-reference 而原始类型是 pass-by-value。但是,如果您尝试将int 原始类型替换为Integer Object,结果将是相同的。如果有人在这里解释这两个例子,我会很高兴。
【问题讨论】:
-
在 Java 中,对象总是按引用传递,而变量是按值传递。字符串也是不可变的对象。
-
@H-Patel 每篇文章,甚至 JLS 都说 Java 是严格按值传递的,无论数据类型如何。
-
@Thilo 这是一个很好的问题。我还尝试阅读答案并制作我的场景。我实际上是在询问我的示例背后发生了什么。
标签: java object parameters pass-by-reference pass-by-value