結論:java
一、基本類型做爲參數傳遞時,是傳遞值的拷貝(不是值自己),不管你怎麼改變這個拷貝,不會引發原值的改變的。app
二、對象(String類型除外)做爲參數傳遞時,是把對象在內存中的地址拷貝一份傳給參數,即在該方法中修改該參數,會引發原值的變化。spa
校驗以下:code
public class HelloMethod { public void p1(String s1, int i1, StringBuffer sb) { i1 = 2; s1 = "bcd"; sb.append("加上abc");
//思考🤔 sb = new StringBuffer("eee"); } public static void main(String[] args) { String s2 = "aaa"; int i2 = 1; StringBuffer sb = new StringBuffer("abc"); HelloMethod helloMethod = new HelloMethod(); helloMethod.p1(s2, i2, sb); System.out.println(String.format("s2 = %s ,i1 = %s,sb = %s", s2, i2, sb)); } }
打印:orm
s2 = aaa ,i1 = 1,sb = abc加上abc
分析:對象
1.當傳遞爲String或int給方法時,在方法的內部作更改兩個值得操做,其結果沒有影響原始值,證實結論1。blog
2.當傳遞的是StringBuffer對象時,在方法內部追加的值,其結果反應到了原始值上,證實結論2。ip
思考:爲何在方法中對該方法的參數從新賦值不會影響原始值。內存
1.在面向對象的語言中(Java,javaScript),方法和方法的參數都是對象。form
2.對參數的從新賦值,就等於丟棄了傳入方法的引用,而給方法的參數對象從新賦值。