<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    區分引用類型和原始類型

    Posted on 2007-05-29 11:35 my 閱讀(392) 評論(0)  編輯  收藏 所屬分類: java
    Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。另外,Java 還為每個原始類型提供了封裝類(Wrapper)。如果需要一個整型變量,是使用基本的 int 型呢,還是使用 Integer 類的一個對象呢?如果需要聲明一個布爾類型,是使用基本的 boolean,還是使用Boolean 類的一個對象呢?本文可幫助您作出決定。

    下面列出了原始類型以及它們的對象封裝類。

    原始類型封裝類
    booleanBoolean
    char Character
    byte Byte
    shortShort
    intInteger
    long Long
    floatFloat
    double Double

    引用類型和原始類型的行為完全不同,并且它們具有不同的語義。例如,假定一個方法中有兩個局部變量,一個變量為 int 原始類型,另一個變量是對一個 Integer 對象的對象引用:

    int i = 5;                       // 原始類型
    Integer j = new Integer(10);     // 對象引用
     
    這兩個變量都存儲在局部變量表中,并且都是在 Java 操作數堆棧中操作的,但對它們的表示卻完全不同。(本文中以下部分將用通用術語堆棧代替操作數堆棧或局部變量表。)原始類型 int 和對象引用各占堆棧的 32 位。(要表示一個 int 或一個對象引用,Java 虛擬機實現至少需要使用 32 位存儲。)Integer 對象的堆棧項并不是對象本身,而是一個對象引用。

    Java 中的所有對象都要通過對象引用訪問。對象引用是指向對象存儲所在堆中的某個區域的指針。當聲明一個原始類型時,就為類型本身聲明了存儲。前面的兩行代碼表示如下:

    引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關。

    許多程序的代碼將同時包含原始類型以及它們的對象封裝。當檢查它們是否相等時,同時使用這兩種類型并了解它們如何正確相互作用和共存將成為問題。程序員必須了解這兩種類型是如何工作和相互作用的,以避免代碼出錯。

    例如,不能對原始類型調用方法,但可以對對象調用方法:

    int j = 5;
    j.hashCode();     // 錯誤
    //...
    Integer i = new Integer(5);
    i.hashCode();     // 正確

    使用原始類型無須調用 new,也無須創建對象。這節省了時間和空間。混合使用原始類型和對象也可能導致與賦值有關的意外結果。看起來沒有錯誤的代碼可能無法完成您希望做的工作。例如:

    import java.awt.Point;
    class Assign
    {
    public static void main(String args)
    {
       int a = 1;
       int b = 2;
       Point x = new Point(0,0);
       Point y = new Point(1,1);                  // 1
       System.out.println("a is " + a);
       System.out.println("b is " + b);
       System.out.println("x is " + x);
       System.out.println("y is " + y);
       System.out.println("Performing assignment and " +
                          "setLocation...");
       a = b;
       a++;
       x = y;                                    // 2
       x.setLocation(5,5);                       // 3
       System.out.println("a is "+a);
       System.out.println("b is "+b);
       System.out.println("x is "+x);
       System.out.println("y is "+y);
    }
    }

    這段代碼生成以下輸出:

    a is 1
    b is 2
    x is java.awt.Point
    y is java.awt.Point
    Performing assignment and setLocation...
    a is 3
    b is 2
    x is java.awt.Point
    y is java.awt.Point

    修改整數 a 和 b 的結果沒什么意外的地方。b 的值被賦予整型變量 a,結果 a 的值增加了 1。這一輸出反映了我們希望發生的情況。但是,令人感到意外的,是在賦值并調用 setLocation之后 x 和 y 對象的輸出。我們在完成 x = y 賦值之后特意對 x 調用了 setLocation,x 和 y 的值怎么會相同呢?我們畢竟將 y 賦予 x,然后更改了 x,這與我們對整數 a 和 b 進行的操作沒什么不同。

    這種混淆是由原始類型和對象的使用造成的。賦值對這兩種類型所起的作用沒什么不同。但它可能看起來所有不同。賦值使等號 (=) 左邊的值等于右邊的值。這一點對于原始類型(如前面的 int a 和 b)是顯而易見的。對于非原始類型(如 Point 對象),賦值修改的是對象引用,而不是對象本身。因此,在語句 x = y; 之后,x 等于 y。換句話說,因為 x 和 y 是對象引用,它們現在引用同一個對象。因此,對 x 所作的任何更改也會更改 y。
     
    因為 x 和 y 引用同一個對象,所以對 x 執行的所有方法與對 y 執行的方法都作用于同一個對象。

    區分引用類型和原始類型并理解引用的語義是很重要的。若做不到這一點,則會使編寫的代碼無法完成預定工作。

    =========================================================================


    Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java

    為每個原始類型提供了封裝類。
    原始類型封裝類,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
    引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,

    這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為 null,

    而原始類型實例變量的缺省值與它們的類型有關

    在java中一切都是以類為基礎的,并且java對基本的數據類型也進行了封裝,如下所示,將介紹幾個基本的數據類型及其封裝類:

    1  Boolean VS boolean

    public final class Boolean
    extends Object
    implements Serializable, Comparable<Boolean>
     

    Boolean 類將基本類型為 boolean 的值包裝在一個對象中。一個 Boolean 類型的對象只包含一個類型為 boolean 的字段。

    此外,此類還為 booleanString 的相互轉換提供了許多方法,并提供了處理 boolean 時非常有用的其他一些常量和方法。
    .............
    Byte  ,Character  ,Double  等等都是一樣

    表A Java原始數據類型

    簡單類型 大小 范圍/精度

    float 4 字節 32位IEEE 754單精度

    double 8 字節 64位IEEE 754雙精度

    byte 1字節 -128到127

    short 2 字節 -32,768到32,767

    int 4 字節 -2,147,483,648到2,147,483,647

    long 8 字節 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807

    char 2 字節 整個Unicode字符集

    boolean 1 位 True或者false

    posts - 63, comments - 45, trackbacks - 0, articles - 99

    Copyright © my

    主站蜘蛛池模板: 亚洲人成网77777亚洲色| 免费看一级做a爰片久久| 亚洲欧洲日韩不卡| 最近中文字幕大全免费版在线| 亚洲一级片免费看| 美女网站在线观看视频免费的| 亚洲色精品aⅴ一区区三区| 中文字幕免费观看视频| 亚洲国产综合精品中文第一区| 日本一卡精品视频免费| 亚洲日韩乱码中文无码蜜桃| 国产妇乱子伦视频免费| 自拍日韩亚洲一区在线| 成人免费视频国产| 四虎国产精品成人免费久久 | 一二三四影视在线看片免费| 色婷五月综激情亚洲综合| 四虎成人免费影院网址| 国产成人综合亚洲| 亚洲色婷婷综合久久| 100部毛片免费全部播放完整| 亚洲人成在线播放| 四虎影视永久免费视频观看| 久久久受www免费人成| 久久99亚洲网美利坚合众国| 成年女人免费视频播放体验区| 亚洲成a∨人片在无码2023| 亚洲精品亚洲人成在线观看下载| 中国一级毛片免费看视频| 亚洲第一网站免费视频| 在线免费观看一级毛片| 国产A∨免费精品视频| 亚洲高清视频在线播放| 国产片免费在线观看| 曰批全过程免费视频在线观看无码| 亚洲国产成人超福利久久精品| 国产成人高清精品免费鸭子| 十八禁在线观看视频播放免费| 亚洲国产av美女网站| 亚洲日韩VA无码中文字幕 | 污污视频免费观看网站|