Java的資料類型和參數傳遞,java資料類型傳遞

來源:互聯網
上載者:User

Java的資料類型和參數傳遞,java資料類型傳遞

 Java提供的資料類型主要分為兩大類:基礎資料型別 (Elementary Data Type)和引用資料類型。

Java中的基礎資料型別 (Elementary Data Type)
名稱 大小  取值範圍
byte型 (位元組) 8bit -128-127  (-2^7到2^7-1)

short型 (短整型)

16bit -2^15到2^15-1
int型 (整形) 32bit -2^31到2^31-1
long型 (長整型) 64bit -2^63到2^63-1
float型 (單精確度浮點型) 32bit  
double型 (雙精確度浮點型) 64bit  
char型 (字元型) 16bit  
boolean型 (布爾型) true和false 只有兩種結果,要麼為“真”要麼為“假”

 

Java中的引用資料類型:

Java作為物件導向的語言,Java中所有用class,interface,abstract class定義的都屬於Java的引用資料類型。

如何理解Java中的基礎資料型別 (Elementary Data Type)和引用資料類型:

  1.Java的基礎資料型別 (Elementary Data Type)是由Java語言本身提供的資料類型,不需要使用者自己定義;

  2.Java中的引用資料類型則是由使用者自己定義的,而引用資料類型的定義需要用到基礎資料型別 (Elementary Data Type);

  3.從記憶體關係上來說:

   Java的的記憶體分為兩大塊:棧記憶體和堆記憶體

  棧記憶體負責儲存方法中的基礎資料型別 (Elementary Data Type)變數和對象的引用變數

  堆記憶體負責儲存通過new關鍵字產生的資料,也就是new關鍵字後面的類中的屬性和方法。

Java中基礎資料型別 (Elementary Data Type)儲存在棧記憶體中,而引用資料類型的類型名儲存在棧記憶體中,但是引用資料類型的內容則儲存在堆記憶體中。兩者之間通過地址來串連,實現互相的訪問。

4.資料由小範圍往大範圍轉換時,JVM會自動幫我們實作類別型的轉換。比如:int i=10;long l=i;類似於這樣的資料轉換,Java的虛擬機器可以自動幫我們來完成這個工作。但是當資料由大範圍往小範圍轉換時就需要手動的加上強制類型轉換。如果在轉過程中出現資料的溢出則根據小範圍的資料類型的範圍進行變動。比如說把整形的-129賦值給byte這時候輸出byte的值就是127;如果把整形的128賦值給byte類型,那麼輸出的就應該是-128。

 

Java中的參數傳遞:

基礎資料型別 (Elementary Data Type):

public void test1(){        int i=10;        long l;        l=i;        System.out.println(i);//輸出值10        System.out.println(l);//輸出值10        l=i+1;        System.out.println(i);//輸出值10        System.out.println(l);//輸出值11    } 

由於基礎資料型別 (Elementary Data Type)是變數名與變數值一同儲存在棧記憶體中,i l 這兩個變數是互相獨立的,對 l 的賦值操作並不會影響 i 值。

引用資料類型:

public class Book {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}public class Test {    public static void main(String[] args) {        Book book1=new Book();        book1.setName("《百年孤獨》");        Book book2=new Book();        book2.setName("《圍城》");        System.out.println("book1:"+book1.getName());//輸出:book1:《百年孤獨》        System.out.println("book2:"+book2.getName());//輸出:book2:《圍城》        book1=book2;        book1.setName("《活著》");        System.out.println("book1:"+book1.getName());//輸出:book1:《活著》        System.out.println("book2:"+book2.getName());//book2:《活著》    }}

第一次new了兩個對象分別是book1,book2他們的書名分別是“百年孤獨”和“圍城”。然後通過賦值,book1也指向了與book2一樣的記憶體地區,這時無論是對book1 還是book2 進行操作影響的都是同一塊記憶體地區了。這也就是為什麼後面的輸出都是一樣的原因了。另外book1原先開闢的記憶體空間由於沒有使用,JVM的記憶體回收機制會對其進行處理,將這些不用的記憶體空間進行釋放。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.