值傳遞和引用傳遞

1)若想搞清楚java中的值傳遞和引用傳遞,首先要搞清楚java中兩種數據類型:基本類型和引用類型。java中基本類型只有八種,以下所示:java

 

 

其他的都是引用類型(就是使用new運算符建立的對象類型),例如String,Integer、數組等。數組

2)這兩種類型的變量的存儲位置也不一樣。基本類型是存儲在棧上,屬於線程局部的,只供本線程訪問。而引用類型是存儲在堆上,能夠供進程的全部線程訪問。從棧裏面申請內存,簡單快速,可是容量有限。堆是全部線程共有的,從堆裏面申請內存要進行相關的加鎖操做,所以申請堆內存的複雜度和時間開銷比棧要大不少。app

3)這兩種類型存儲的值意義不一樣。基本類型變量存儲的值就是變量的實際值(字面值,一個字符,數值或者布爾值),而引用類型存儲的值是指向對象的地址值。ui

int val;//基本類型聲明時,即分配內存空間(存放數據)。
val=10;
Date date;//引用類型聲明時,只是給引用類型變量date分配了內存空間。
date=new Data();//使用new操做符建立對象實例時,才建立對象的內存空間。在這裏,將對象內存空間的地址複製給date
date2=date;//只是將對象地址賦給了date2,並無複製對象。指向同一個對象

總之,java中值傳遞方式就是值傳遞,只是基本類型變量傳遞的是字面值,而引用類型傳遞的是指向對象的地址值,歸根到底都是值。spa

4)以一個實例說明值傳遞和引用傳遞:線程

 1 public class TestMain {    
 2     public static void main(String[] args) {
 3         String a = "a";
 4         String b = "b";
 5         operator(a, b);    
 6         StringBuilder x = new StringBuilder("x"); 
 7         StringBuilder y = new StringBuilder("y");        
 8         System.out.println(a + "," + b);    
 9         System.out.println(x + "," + y);
10     }
11 
12     public static void operator(String a, String b) {
13         a += b;
14         System.out.println("new a:"+a);
15         b = a;
16 
17     }
18 
19     public static void operator(StringBuilder a, StringBuilder b) {
20         a.append(b);
21         b = a;
22     }
23 }

結果以下:code

5)關於"=="和equals對象

6)最後,總之,引用類型存儲的是對象的地址blog

相關文章
相關標籤/搜索