java方法參數接收是值與引用的思考

結論: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.對參數的從新賦值,就等於丟棄了傳入方法的引用,而給方法的參數對象從新賦值。

相關文章
相關標籤/搜索