1. 程式人生 > >Java中的記憶體分配以及棧和堆的區別

Java中的記憶體分配以及棧和堆的區別

  • Java中的記憶體分配以及棧和堆的區別

    • (1)棧: 存放的是區域性變數
      區域性變數:在方法定義中或者方法宣告上的變數都是區域性變數。

    • (2)堆: 存放的是所有new出來的東西
      特點:
      a: 每一個new出來的東西都會為其分配一個地制值。
      b: 每一個變數都有一個預設的值

        	byte,short,int,long  -- 0
        	float,double 		       -- 0.0
        	char 				      -- '\u0000'
        	boolean 				-- false
        	引用資料型別	 -- null		
      

      c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收

    • (3)方法區:(面向物件部分講解)

    • (4)本地方法區:(和系統相關)

    • (5)暫存器:(cpu使用)

  • 陣列的初始化靜態初始化及記憶體圖

    (1)靜態初始化的格式:
    格式:資料型別[] 陣列名 = new 資料型別[]{元素1,元素2,…};
    舉例: int[] arr = new int[]{1,2,3};
    簡化格式:
    資料型別[] 陣列名 = {元素1,元素2,…};
    舉例: int[] arr = {1,2,3};
    (2)畫圖演示
    a:定義一個數組,輸出陣列名稱和陣列中的元素值

  • 陣列操作的兩個常見小問題越界和空指標

    a:ArrayIndexOutOfBoundsException:陣列索引越界異常
    原因:你訪問了不存在的索引。
    b:NullPointerException:空指標異常
    原因:陣列已經不在指向堆記憶體了。而你還用陣列名去訪問元素。

  • Java中的引數傳遞問題及圖解

    A:案例演示

          public static void main(String[] args) {
      	int a = 10;
      	int b = 20;
      	System.out.println("a: " + a + ",b: " + b);
      	change(a,b);
      	System.out.println("a: " + a + ",b: " + b);
          
          int[] arr = {1,2,3,4,5};
      	change(arr);
      	System.out.println(arr[1]);
      }
    
      public static void change(int a,int b)  {
    
      	System.out.println("a: " + a + ",b: " + b);
      	a = b;
      	b = a + b;
      	System.out.println("a: " + a + ",b: " + b);
      }
    
      public static void change(int[] arr){
      	for(int x = 0 ; x < arr.length ; x++){
      		if(arr[x]%2 == 0){
      			arr[x] *= 2;
      		}
      	}
      }