Java 方法之形參和實參 、堆、棧、基本數據類型、引用數據類型


 * 形式參數:用於接收實際參數的變量(形式參數一般就在方法的聲明上)
* 實際參數:實際參與運算的變量

 * 方法的參數如果是基本數據類型:形式參數的改變不影響實際參數。
*
* 基本數據類型:byte,short,int,float,double,char,boolean

 * 方法的參數如果是引用數據類型:形式參數的改變直接影響實際參數        
 *  引用數據類型:數組arr,接口,類
* string是個類,是引用數據類型

package method.形式參數OR實際參數;

public class XingCan {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);//a:10,b:20
        change(a,b);
        System.out.println("a:"+a+",b:"+b);//??? a:10,b:20

    }

    public static void change(int a,int b) {//a=10,b=20
        System.out.println("a:"+a+",b:"+b);//a:10,b:20
        a = b;//a=20
        b = a + b;//b=40
        System.out.println("a:"+a+",b:"+b);//a:20,b:40
    }
}

輸出結果:

 

 

package method.形式參數OR實際參數;
/*
 * 如果參數是引用數據類型:
 *         形式參數的改變直接影響實際參數
 */
public class ShiCan {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
        System.out.println("----------");
        change(arr);
        System.out.println("~~~~~~~~~");
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
    }


    public static void change(int[] arr) {
        for(int x=0; x<arr.length; x++) {
            if(arr[x]%2==0) {
                arr[x]*=2;
            }
            System.out.println(arr[x]);
        }
    }
}

輸出:

 

 

 

一、基本數據類型:

byte:Java中最小的數據類型,在內存中占8位(bit),即1個字節,取值范圍-128~127,默認值0

short:短整型,在內存中占16位,即2個字節,取值范圍-32768~32767,默認值0

int:整型,用於存儲整數,在內在中占32位,即4個字節,取值范圍-2147483648~2147483647,默認值0

long:長整型,在內存中占64位,即8個字節-2^63~2^63-1,默認值0L

float:浮點型,在內存中占32位,即4個字節,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0

double:雙精度浮點型,用於存儲帶有小數點的數字,在內存中占64位,即8個字節,默認值0

char:字符型,用於存儲單個字符,占16位,即2個字節,取值范圍0~65535,默認值為空

boolean:布爾類型,占1個字節,用於判斷真或假(僅有兩個值,即true、false),默認值false

二、引用數據類型:

類、接口類型、數組類型、枚舉類型、注解類型。

區別:

基本數據類型在被創建時,在棧上給其划分一塊內存,將數值直接存儲在棧上。

引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然后由棧上面的引用指向堆中對象的地址。

例如,有一個類Person,有屬性name,age,帶有參的構造方法,

Person p = new Person("zhangsan",20);

在內存中的具體創建過程是:

1.首先在棧內存中位其p分配一塊空間;

2.在堆內存中為Person對象分配一塊空間,並為其三個屬性設初值"",0;

3.根據類Person中對屬性的定義,為該對象的兩個屬性進行賦值操作;

4.調用構造方法,為兩個屬性賦值為"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯系);

5.將Person對象在堆內存中的地址,賦值給棧中的p;通過引用(句柄)p可以找到堆中對象的具體信息。

相關知識:

靜態區: 保存自動全局變量和 static 變量(包括 static 全局和局部變量)。靜態區的內容在總個程序的生命周期內都存在,由編譯器在編譯的時候分配。

堆區:  一般由程序員分配釋放,由 malloc 系列函數或 new 操作符分配的內存,其生命周期由 free 或 delete 決定。在沒有釋放之前一直存在,直到程序結束,由OS釋放。其特點是使用靈活,空間比較大,但容易出錯

棧區: 由編譯器自動分配釋放,保存局部變量,棧上的內容只在函數的范圍內存在,當函數運行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限

文字常量區: 常量字符串就是放在這里的。   程序結束后由系統釋放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM