JAVA中值類型和引用類型的不一樣?數組
[定義] spa
引用類型表示你操做的數據是同一個,也就是說當你傳一個參數給另外一個方法時,你在另外一個方法中改變這個變量的值,指針
那麼調用這個方法是傳入的變量的值也將改變.值類型表示複製一個當前變量傳給方法,code
當你在這個方法中改變這個變量的值時,最初生命的變量的值不會變.通俗說法: 值類型就是現金,要用直接用;引用類型是存摺,要用還得先去銀行取現。對象
[值類型]blog
也就是基本數據類型 基本數據類型常被稱爲四類八種接口
四類: 內存
1,整型 2,浮點型 3,字符型4,邏輯型字符串
八種:class
1,整型3種 byte,short,int,long
2,浮點型2種 float,double
3,字符型1種 char
4,邏輯型1種 boolean
[引用類型]
除了四類八種基本類型外,全部的類型都稱爲引用類型(數組,類,接口,字符串)
在弄清楚值類型與引用類型以後,最後一點就是值傳遞與引用傳遞,這纔是關鍵
[值傳遞]
基本數據類型賦值都屬於值傳遞,值傳遞傳遞的是實實在在的變量值,是傳遞原參數的拷貝,值傳遞後,實參傳遞給形參的值,形參發生改變而不影響實參。
[引用傳遞]
引用類型之間賦值屬於引用傳遞。引用傳遞傳遞的是對象的引用地址,也就是它的自己(本身最通俗的理解)。
引用傳遞:傳的是地址,就是將實參的地址傳遞給形參,形參改變了,實參固然被改變了,由於他們指向相同的地址。
引用和咱們的指針差很少,可是它不又不須要咱們去具體的操做
[內存分配]
一個具備值類型(value type)的數據存放在棧內的一個變量中。便是在棧中分配內存空間,直接存儲所包含的值,其值就表明數據自己。
值類型的數據具備較快的存取速度。
一個具備引用類型(reference type)的數據並不駐留在棧中,而是存儲於堆中。便是在堆中分配內存空間,不直接存儲所包含的值,而是指向所要存儲的值,其值表明的是所指向的地址。當訪問一個具備引用類型的數據時,須要到棧中檢查變量的內容,該變量引用堆中的一個實際數據。引用類型的數據比值類型的數據具備更大的存儲規模和較低的訪問速度。
Java中有垃圾回收機制,棧內存中的變量隨着方法的結束內存天然銷燬了,而用引用類型的時候,當方法結束的時候,這個對象可能被另外一個引用類型所應用,不會銷燬,只有當一個對象沒有任何引用變量引用的時候,垃圾回收機制纔會回收。
package com.hanqi; public class Test17 { public static void main(String[] args) { //內存劃分爲棧內存(小)和堆內存(大) // 值類型 int i=10;//保存在棧內存 int m=i;//把值複製給m i=11; System.out.println("m="+m+"i="+i); //引用類型;除了基本數據類型,數組,String,類 //實際內容存在堆,棧裏只存對應到堆的地址 int[] a= new int[]{1,2,3,4}; int[] b=a;//把對應到堆的地址給了b a[2]=100; System.out.println("b[2]="+b[2]); } }