【发布时间】:2014-01-27 16:32:32
【问题描述】:
考虑以下代码中的第 2 行和第 3 行.....
class ModifyObjects {
static void modifyString1(String s){
s = "xyz";
//Or any other operations
}
static String modifyString2(String s){
s = "xyz";
return s;
//Or any other operations
}
static void modifyPrimitive1(int i){
i=9;
}
static int modifyPrimitive2(int i){
i=9;
return i;
}
}
public class Operations {
public static void main(String[] args) {
// TODO Auto-generated method stub
String st1 = "abcd";
String st2 = "qwerty";
String st3;
int i1=0, i2;
st1 = "xyz"; //line 1
System.out.println("st1: " + st1);
ModifyObjects.modifyString1(st2);
System.out.println("st2: " + st2); //line 2
st3 = ModifyObjects.modifyString2(st2);
System.out.println("st3: " + st3);
System.out.println("st2: " + st2);
ModifyObjects.modifyPrimitive1(i1);
System.out.println("i1: " + i1); //line 3
i2 = ModifyObjects.modifyPrimitive2(i1);
System.out.println("i2: " + i2);
}
}
第 2 行给出 st2 作为 qwerty(不修改。应该是 xyz。) 第 3 行给出 i1 = 0(不修改。应该是 9。)
这看起来有点奇怪。这是输出:
st1: xyz
st2: qwerty
st3: xyz
st2: qwerty
i1: 0
i2: 9
还在第 1 行创建了一个新的字符串对象“xyz”,对吗?我认为这里没有引用“abcd”。
【问题讨论】:
-
我强烈建议您从 Java 初学者书籍或 Oracle 教程开始。
-
Is Java "pass-by-reference"? 的可能重复项
-
第 1 行和第 2 行差别不大。我们该如何解释?
标签: java string void primitive