引用數據類型的概念_引用數據類型有哪幾種

2020-11-28 電子發燒友

  引用類型 由類型的實際值引用(類似於指針)表示的數據類型。如果為某個變量分配一個引用類型,則該變量將引用(或「指向」)原始值。不創建任何副本。引用類型包括類、接口、委託和裝箱值類型。

  引用數據類型的概念

  「引用」(reference)是c++的一種新的變量類型,是對C的一個重要補充。它的作用是為變量起一個別名。假如有一個變量a,想給它起一個別名,可以這樣寫:

  int a;int &b=a;

  這就表明了b是a的「引用」,即a的別名。經過這樣的聲明,使用a或b的作用相同,都代表同一變量。在上述引用中,&是「引用聲明符」,並不代表地址。

  不要理解為「把a的值賦給b的地址」。引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的地址。聲明引用並不開闢內存單元,b和a都代表同一變量單元。

  注意:在聲明引用變量類型時,必須同時使之初始化,即聲明它代表哪一變量。在聲明一個變量的引用之後,在本函數執行期間,該引用一直與其代表的變量相聯繫

  引用數據類型有哪幾種

  Java提供了兩類數據類型:一種是基本類型(原始類型),一種是引用類型。

  

  

  注意:

  1、在基本數據類型中,除了boolean類型所佔長度與平臺有關外,其他數據類型長度都是與平臺無關的。比如,int永遠佔4個字節(1 Byte = 8 bit)。

  2、void不是基本數據類型

  在 Java 中基本類型只有八種,詳見 Java Language Specification 的 4.2 節:

  http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2

  另外,在 Java Language Specificaion 的第 14.8 節也提及 void 並不是一種類型:

  http://java.sun.com/docs/books/jls/third_edition/html/statements.html#5989

  為什麼《Thinking in Java》等一些書籍都說,void是基本類型的一種呢?

  來看void的包裝類java.lang.Void源碼:

  package java.lang;

  /**

  * The Void class is an uninstantiable placeholder class to hold a

  * reference to the Class object representing the Java keyword

  * void.

  *

  * 翻譯:Void類是一個不可重複的佔位符類,

  * 用於保存對表示Java關鍵字void的Class對象的引用

  **/

  public final class Void { //final表明這個類是不允許被其他類繼承

  /**

  * The Class object representing the pseudo-type corresponding to

  * the keyword void.

  * 翻譯:Class對象表示對應於關鍵字void的偽類型。

  */

  public static final Class《Void》 TYPE = Class.getPrimitiveClass(「void」);

  /*

  * The Void class cannot be instantiated.

  * 翻譯:Void類不能被實例化。

  */

  private Void() {}

  }

  1234567891011121314151617181920212223242526

  再看getPrimitiveClass()方法的源碼:

  /*

  * Return the Virtual Machine『s Class object for the named

  * primitive type.

  * 翻譯:返回指定基本類型的虛擬機的Class對象。

  */

  static native Class getPrimitiveClass(String name);123456

  「Ctrl+Alt+H」查看調用getPrimitiveClass()方法的所有類,確實是「Byte、Boolean、Short、Character、Integer、Long、Float、Double、Void」一共9個包裝類,由此猜測把void也歸到基本數據類型的說法可能來源於此。

  3、基本數據類型的默認值僅在作為類中屬性時生效

  在方法內部必須先對基本數據類型變量賦值後才能使用,否則編譯不通過。Demo如下:

  public class DefaultValueTest {

  static int intA;

  static boolean blnA;

  public static void main(String[] args) {

  int intB;

  boolean blnB;

  System.out.println(intA); //輸出0

  System.out.println(blnA); //輸出false

  //System.out.println(intB); //編譯不通過

  //System.out.println(blnB); //編譯不通過

  }

  }12345678910111213

  在程序中如果某些數據可能會返回空值,那麼用包裝類比較好。比如當結果為空時,轉換為int會發生異常,而轉換為Integer則不會,因為對象可以為null。此時建議用包裝類,雖然會犧牲一些轉換效率,但可以避免持久化數據時產生的一些異常。

  - 引用數據類型

  引用類型(reference type)指向一個對象,不是原始值,指向對象的變量是引用變量。

  在java裡面除去基本數據類型的其它類型都是引用數據類型,自己定義的class類都是引用類型,可以像基本類型一樣使用。

  引用類型常見的有:String,StringBuffer,ArrayList,HashSet,HashMap等。

  String也屬於引用數據類型:

  String a = 「china」;

  String b =a; // 則a、b都指向常量池的「china」。

  String a = new String(「china」);

  String b =a; //則a、b都指向堆中的「china」。

  String a = new String(「china」);

  String b =a;

  a = a.substring(0,1); //則b指向棧中的「china」,a指向新的對象「c」。12345678

  如果要對比兩個對象是否相同,則需要使用equals()方法,但有一點需要注意:equals()方法的默認行為是比較引用。如果是你自己寫的類,你應該為它重寫equals()來比較對象的內容。大多數Java類庫都實現了比較對象內容的equals()方法。

  - 兩種類型對比

  最後,基本數據類型和引用數據類型的一些對比如下:

  

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 大數據分析模型有哪幾種類型
    數據降維也稱為數據歸約或數據約減。它的目的就是為了減少數據計算和建模中涉及的維數。有兩種數據降維思想:一種是基於特徵選擇的降維,另一種是基於維度變換的降維。聚類分析法是大數據挖掘和測算中的基礎每日任務,聚類分析法是將很多統計數據集中化具備「類似」特點的統計數據點區劃為一致類型,並最後轉化成好幾個類的方式。大量數據集中必須有相似的數據點。基於這一假設,可以區分數據,並且可以找到每個數據集(分類)的特徵。
  • c++ 之布爾類型和引用的學習總結!
    一、布爾數據類型:在c語言裡面我們知道是沒有布爾數據類型的,而在C++中添加了布爾數據類型(bool),它的取值是:true或者false(也就是1或者0),在內存大小上它佔用一個字節大小:1、bool類型只有true(非0)和false(0)兩個值。
  • 數據模型概念及類型劃分
    2)數據操作:數據模型中數據操作主要描述在相應的數據結構上的操作類型和操作方式。  3)數據約束:數據模型中的數據約束主要描述數據結構內數據間的語法、詞義聯繫、他們之間的制約和依存關係,以及數據動態變化的規則,以保證數據的正確、有效和相容。  類型  數據模型按不同的應用層次分成三種類型:分別是概念數據模型、邏輯數據模型、物理數據模型。
  • labview 變體數據類型
    變體數據類型是LabVIEW中多種數據類型的容器。將其它數據轉換為變體時,變體將存儲數據和數據的原始類型,保證日後可將變體數據反向轉換。
  • 淺談動態類型領域中 Python 的變量、對象以及引用
    本文字數:1355 字閱讀本文大概需要:4 分鐘00.寫在之前寫這篇文章源自上次和一位讀者的交流,在給他回答問題的時候我發現由於之前有學習 C 和 Java 這種靜態編譯類型語言的背景,使他在學習 Python 的時候還是會習慣用之前程式語言的思考去嘗試理解
  • Java基礎學習:java中的基本數據類型
    一、基本類型 1、基本類型 不使用New創建,聲明一個非引用傳遞的變量,且變量的值直接置於堆棧中,大小不隨運行環境變化,效率更高。使用new創建的引用對象存儲在堆中。
  • JavaScript數組 - 引用詳解
    基本數據類型詳解在學習數組引用詳解前,我們先來看基本數據類型的詳解舉個小例子:我們聲明一個a = 10;然後聲明一個函數,這個函數裡面有個參數為a把這個參數的a改成5,a = 5; 並且再加上alert(a);函數外我們先去alert(a);再調用這個函數把a寫在裡面傳進去
  • 面試官:Java 中有幾種基本數據類型是什麼?
    認識基本數據類型在學習基本數據類型之前,我們先認識一下這兩個單詞:1、bit --位:位是計算機中存儲數據的最小單位,指二進位數中的一個位數,其值為「0」或「1」。2、byte --字節:字節是計算機存儲容量的基本單位,一個字節由8位二進位數組成。
  • python的核心數據類型有哪些?
    數據類型數字: int,long,float,complex,bool字符: str,unicode列表: list字典: dict元組: tuple文件: file其他類型: 集合(set),frozenset,類類型,None類型轉換str(),repr()或format(): 將非字符類型數據轉換為字符int(): 轉為整數float
  • Java數據類型的「誰都看得懂」總結
    Java數據類型總結(用你敏銳的洞察力猜猜上圖可以組成什麼詞?)Java語言是一種強類型語言,所謂強類型語言就是所有變量的使用都必須嚴格符合規定,所有變量都必須先定義後使用。既然有強類型語言,就一定存在弱類型語言弱類型語言的使用就跟強類型語言恰恰相反了,他不需要先定義後使用,比如Python,JavaScript等等的計算機語言都屬於弱類型語言。
  • Excel中公式的基本概念之運算符、絕對引用和相對引用
    一、公式的概念公式是以等號「=」開頭,按一定的規則對指定的數據進行計算的表達式。其組成要素一般包含函數、單元格引用、數學運算符、常量、字符和標點等。一個公式可計算得到一個或多個結果。三、引用在Excel的學習過程中,引用的概念絕對是我們必須認真理解的基礎術語。引用可分為相對引用、絕對引用和混合引用三種。
  • 每日Excel技巧(熟能生巧):引用中的 「相對引用和絕對引用」
    引用中的特殊概念「相對引用和絕對引用」先糾正一個概念:我們日常都習慣稱為「報表」「表格」「**表」,實際上指的是工作簿。它包含sheet1、sheet2……多個工作表。在這裡,我將用通俗語言來解釋。一、從同一報表內的不同工作表引用、提取數據。
  • Excel相對引用、絕對引用和混合引用
    今天有朋友問什麼是絕對引用,下面這篇文章來介紹。相對引用如下表中,我們需要在D列計算出B列和C列的乘積。行絕對列相對混合引用的類型樣式為C$2,即保持行號不變,向下複製公式時保持C$2不變,向右複製公式時會依次變為D$2、E$2、F$2、G$2等。
  • 物聯網平臺有哪幾種類型
    ,也對如何從物聯網系統中受益有了一些想法。   物聯網平臺有5種類型   1.網絡連接平臺   顧名思義,網絡連接平臺以物聯網系統的網絡組件為中心。它們為用戶提供保持設備在線所必需的軟體、連接硬體和數據指導。它們的網絡通常依賴現有的運營商服務和WI-FI,並以一種便於物聯網設置的方式配置網絡連接。
  • 科普:雲資料庫有哪幾種類型,應該如何選擇
    一般來說,資料庫分為兩大類:關係型資料庫和非關係型資料庫。 關係型資料庫(SQL) 對數據的操作幾乎建立在一個或多個關係表格上,通過關聯的表格進行分類、合併、連接或選取等運算來實現數據的管理,目前主流的關係型資料庫有:MySQL、OracleL、SQL Server等… 關係型資料庫是目前使用最廣泛的類型,以行和列的形式存儲數據
  • JavaScript中基本數據類型Boolean、String和Number的含義和定義
    #JavaScript#腳本語言中,其數據類型與其它高級語言是有區別的JavaScript數據類型從大體上分為:基本數據類型和引用數據類型。(1). 基本數據類型是String(字符串)、Number(數字)、Boolean(布爾)。(2).
  • 食品攪拌機有哪幾種類型 多功能攪拌機的使用方法
    關於食品攪拌機的類型相信很多人都不知道,下面就和小編一起來看看食品攪拌機有哪幾種類型,順便來說說多功能攪拌機的使用方法以及多功能攪拌機可以打發蛋清嗎,感興趣的朋友一起來看看吧。一、食品攪拌機有哪幾種類型食品攪拌機有哪幾種類型?
  • STM8 STM32 數據類型
    特別用類型限定詞IO來訪問外設的變量。         表3 數據類型限定詞IO。」,新的庫使用CMSIS和定義的數據類型。     表5  STM32F10xxx固件庫V2.0.3與CMSIS數據類型對比 STM32F10xxx固件庫類型CMSIS類型描述s32int32_t有符號32位數據s16int16_t有符號16位數據s8int8_
  • 汽車玻璃膜有哪幾種類型?
    汽車的玻璃膜種類繁多不同的玻璃膜具有不同的材質和功能汽車玻璃膜有哪幾種類型?Q1、汽車玻璃膜有哪幾種類型?按照材質可以分為:1.染色膜。2.有粉塵或有裸露基礎建築材料的室內施工店。這種施工店比露天施工店稍好,但也難保一些主要部位存在一兩處氣泡、灰塵顆粒遺漏,邊緣部位擠淨率差,氣泡密集等問題。3.有羊毛或白橡膠的靜電除塵車間。這個是基礎標準的施工條件,各位車主只需注意選材為真品正品即可選擇。
  • 第四篇:JavaScript基本數據類型
    JavaScript基本數據類型有String(字符串類型)、Number(數字類型)、Boolean(布爾類型)、Array(數組類型)、Date(日期類型)。不同於Java語言,JS 語言是弱數據類型,聲明變量時不需要說明數據類型,JS解釋器會自動根據變量的值賦予變量對應的數據類型。