考慮線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引用
我強烈建議先從一個初學者的關於Java的書或Oracle的教程。的 –
可能重複的[是Java「的傳遞按引用」?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Radiodef
線1和線2不很大的不同。我們如何解釋? – user3176541