(轉)java 中的 傳值 與 傳址

在一些面試企業的過程中 ,不少人看重於基礎的考覈。其中,傳值與傳地址 就是一種基礎能力考覈的關鍵,這裏我總結了 5種很典型的例子 ,最後作了一個總結面試

  • 首先是8種基本數據類型 下面用 int 類型 作例子 屬於傳值
public static void method1(int i) { i= i+10; System.out.println("在方法內的值"+i); } public static void main(String[] args) { int i =5; method1(i); System.out.println("調用以後的值"+i); } 

調用結果以下 
在方法內的值15 
調用以後的值5數組

  • 接下來是一個比較特殊的類型 引用數據類型

Integer Long Boolean Byte Character Double Float Short 
這幾種數據類型 也是傳地址 可是它比較特殊 能夠理解爲「傳值」函數

public static void method2(Float i) { i= i+10; System.out.println("在方法內的值"+i); } public static void main(String[] args) { Float i =1.11f; method2(i); System.out.println("調用以後的值"+i); }

調用結果以下 
在方法內的值11.11 
調用以後的值1.11this

  • 下面又是一個比較特殊的 字符串常量 String
public static void method3(String i) { i= i+"world"; System.out.println("在方法內的值 "+i); } public static void main(String[] args) { String a ="你好"; method3(a); System.out.println("調用以後的值 "+a); }

調用結果以下 
在方法內的值 你好world 
調用以後的值 你好spa

  • 下面一個是數組 傳址
public static void method4(String[] i) { i[0]="三"; } public static void main(String[] args) { String [] a = new String[2]; a[0]="一"; a[1]="二"; for(int j = 0; j < a.length; j++){ System.out.print(a[j] + " "); } method4(a); System.out.println( " "); for(int j = 0; j < a.length; j++){ System.out.print(a[j] + " "); } }

調用結果以下 
一 二 
三 二code

最後一個 也是咱們應用最多的一個 就是 對象 傳址對象

public class Demo { public int ii =0; public Demo(int ii) { this.ii =ii; } } public static void method5(Demo i) { i.ii+=10; } public static void main(String[] args) { Demo deo = new Demo(6); method5(deo); System.out.println("調用以後的值 "+deo.ii); }

調用結果以下 
調用以後的值 16內存

傳值 傳的是基本類型 經過參數傳遞給方法, 傳的是值的拷貝 
因此 函數體內的值的變化,不會影響函數體外的值字符串

若是傳入的是解百納類型包裝類的引用,傳的仍然是值的拷貝

傳地址 傳入的是對象的引用,經過參數傳給方法,傳的是地址的拷貝 
若是在函數體內,改變傳入地址所指向的對象數據,會影響函數體外的對象。這個事情能夠這麼去理解 ,我把地址的內存 傳給了方法 方法改變了內存中的內容,因此指向它的引用的值 天然都會改變。string

相關文章
相關標籤/搜索