欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型+四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換

 更新時(shí)間:2024年04月15日 09:29:01   作者:尋求出路的程序媛  
java中除了基本數(shù)據(jù)類型之外,剩下的都是引用數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型?+?四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下

1.總覽

  • Java的數(shù)據(jù)類型只有兩大類:8大基本數(shù)據(jù)類型引用數(shù)據(jù)類型。其中基本數(shù)據(jù)類型又被稱為值類型
    • 基本數(shù)據(jù)類型:6種數(shù)字類型(byte/short/int/long/float/double)、1種字符型(char)、1種布爾型(boolean)
    • 引用數(shù)據(jù)類型:類(Class)、接口(Interface)、數(shù)組(Array)
    • 除了以上的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,還有一些其他相關(guān)的數(shù)據(jù)類型,例如字符串類型String、枚舉類型Enum,它們都是基于引用數(shù)據(jù)類型來實(shí)現(xiàn)的
  • 基本數(shù)據(jù)類型只能存自己類型的值,無其他額外功能,具體介紹如下第2小節(jié)
  • 引用類型:參數(shù)傳遞時(shí),以拷貝引用地址的方式傳遞給接收變量,而非復(fù)制整個(gè)數(shù)據(jù)本體。除八大基本數(shù)據(jù)類型之外的所有數(shù)據(jù)類型,都為引用數(shù)據(jù)類型。所有引用數(shù)據(jù)類型的默認(rèn)值都為null。
  • 為了基本數(shù)據(jù)類型可以與引用數(shù)據(jù)類型互相轉(zhuǎn)換、以利用彼此的特性,java為每一種基本數(shù)據(jù)類型提供了相應(yīng)的包裝類。包裝類對(duì)基本數(shù)據(jù)類型進(jìn)行了封裝,提供了豐富的功能,包裝類是基本類型的拓展
  • 包裝類是引用類型的一種,包裝類與基本數(shù)據(jù)類型一一對(duì)應(yīng),也有8種,分別為:Byte、Short、Integer、Long、Float、Double、Character、Boolean

2.基本數(shù)據(jù)類型

2.1 類型概述

  • 6種數(shù)字類型

    • 4種整數(shù)型:byte、short、int、long
    • 2種浮點(diǎn)型:float、double
  • 1種字符類型:char

  • 1種布爾型:boolean

2.2 基本數(shù)據(jù)類型詳解

基本類型存儲(chǔ)大小初始化默認(rèn)值取值范圍包裝類型
byte1字節(jié)(8位)0-128~127Byte
short2字節(jié)(16位)0-32768~32767Short
int4字節(jié)(32位)0-2^31 ~ 2^31 - 1Integer
long8字節(jié)(64位)0L。"L"理論上不分大小寫,但若寫成"l"容易與數(shù)字"1"混淆,不容易分辨,所以最好大寫。-2^63 ~ 2^63 - 1Long
float4字節(jié)(32位)0.0f符合IEEE754標(biāo)準(zhǔn)的浮點(diǎn)數(shù),1.4E-45 ~ 3.4028235E38Float
double8字節(jié)(64位)0.0d符合IEEE754標(biāo)準(zhǔn)的浮點(diǎn)數(shù),4.9E-324 ~ 1.7976931348623157E308Double
char2字節(jié)(16位)‘\u0000’\u0000 ~ \uffff(十進(jìn)制等效值為 0~65535,本質(zhì)也是數(shù)值)Character
boolean1字節(jié)(8位)/4字節(jié)(32位)falsetrue/falseBoolean

char 數(shù)據(jù)類型可以儲(chǔ)存任何字符。
float、double不能用來表示精確的值,運(yùn)算不精確——>解決方案:BigDecimal。創(chuàng)建BigDecimal對(duì)象的方式:

  • BigDecimal(double val) : double類型的數(shù)據(jù)作為參數(shù),交給BigDecimal對(duì)象【不用,因?yàn)閐ouble本身不精確】
  • BigDecimal(String val) : String類型的數(shù)據(jù)作為參數(shù),交給BigDecimal對(duì)象【用這個(gè)】
    注:double->String 直接拼接一個(gè)字符串""就行。

對(duì)于數(shù)值類型的基本類型的取值范圍,我們無需強(qiáng)制去記憶,因?yàn)樗鼈兊闹刀家呀?jīng)以常量的形式定義在對(duì)應(yīng)的包裝類中

//long
System.out.println("基本類型:long 二進(jìn)制位數(shù):" + Long.SIZE);
System.out.println("包裝類:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();

//double
System.out.println("基本類型:double 二進(jìn)制位數(shù):" + Double.SIZE);
System.out.println("包裝類:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();

//其他類型方法同上類似

2.3 基本數(shù)據(jù)類型與引用數(shù)據(jù)類型區(qū)別

  • 存儲(chǔ)方式:基本數(shù)據(jù)類型直接存儲(chǔ)值,而引用數(shù)據(jù)類型存儲(chǔ)的是對(duì)象的引用(內(nèi)存地址)
  • 內(nèi)存分配:基本數(shù)據(jù)類型在棧上分配內(nèi)存,引用數(shù)據(jù)類型在堆上分配內(nèi)存(具體內(nèi)容存放在堆中,棧中存放的是其具體內(nèi)容所在內(nèi)存的地址)。棧上的分配速度較快,但是內(nèi)存空間較小,而堆上的分配速度較慢,但可以分配更大的內(nèi)存空間
  • 默認(rèn)值:基本數(shù)據(jù)類型會(huì)有默認(rèn)值,例如int類型的默認(rèn)值是0,boolean類型的默認(rèn)值是false。而引用數(shù)據(jù)類型的默認(rèn)值是null,表示沒有引用指向任何對(duì)象
  • 復(fù)制操作:基本數(shù)據(jù)類型進(jìn)行復(fù)制時(shí),會(huì)復(fù)制該變量的值。而引用數(shù)據(jù)類型進(jìn)行復(fù)制時(shí),只會(huì)復(fù)制對(duì)象的引用,兩個(gè)變量指向同一個(gè)對(duì)象
  • 參數(shù)傳遞:基本數(shù)據(jù)類型作為方法的參數(shù)傳遞時(shí),傳遞的是值的副本,不會(huì)修改原始值。而引用數(shù)據(jù)類型作為方法的參數(shù)傳遞時(shí),傳遞的是對(duì)象的引用,可以修改對(duì)象的屬性或狀態(tài)
  • 比較操作:基本數(shù)據(jù)類型使用==進(jìn)行比較時(shí),比較的是值是否相等。而引用數(shù)據(jù)類型使用==進(jìn)行比較時(shí),比較的是引用是否指向同一個(gè)對(duì)象,如果要比較對(duì)象的內(nèi)容是否相同,需要使用equals()方法

注意:Java中的包裝類(Wrapper Classes)對(duì)基本數(shù)據(jù)類型進(jìn)行了封裝,使其也具有了對(duì)象的特性,可以調(diào)用方法和進(jìn)行類型轉(zhuǎn)換等操作。

2.4 基本數(shù)據(jù)類型與包裝類區(qū)別

  • 存儲(chǔ)方式:基本類型直接存儲(chǔ)值,而包裝類型存儲(chǔ)的是對(duì)應(yīng)基本類型值的對(duì)象。
  • 空值處理:基本類型沒有空值(null)的概念,而包裝類型可以將null作為有效值來表示缺失或無效值。
  • 默認(rèn)值:基本類型有默認(rèn)值,例如int類型的默認(rèn)值是0,boolean類型的默認(rèn)值是false。而包裝類型的默認(rèn)值是null。
  • 對(duì)象操作:基本類型不能直接調(diào)用方法,而包裝類型可以調(diào)用對(duì)應(yīng)的方法,例如Integer類的intValue()方法可以獲取保存在Integer對(duì)象中的值。
  • 自動(dòng)裝箱/拆箱:基本類型和包裝類型之間可以進(jìn)行自動(dòng)裝箱和拆箱的轉(zhuǎn)換。自動(dòng)裝箱是指將基本類型的值自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的包裝類型對(duì)象,如int 轉(zhuǎn)Integer,Integer integer = 100,底層調(diào)用了Interger.valueOf(100)方法;而自動(dòng)拆箱則是將包裝類型對(duì)象自動(dòng)轉(zhuǎn)換為基本類型的值。
  • 泛型支持:泛型只能使用引用類型,不能直接使用基本類型。因此,當(dāng)需要在泛型中使用基本類型時(shí),需要使用對(duì)應(yīng)的包裝類型。
  • 比較方式:基本類型使用==進(jìn)行比較時(shí),比較的是值是否相等。而包裝類型使用==進(jìn)行比較時(shí),比較的是引用是否指向同一個(gè)對(duì)象,而不是比較值是否相等。若要比較包裝類型的值是否相等,需要使用equals()方法。

注意:在Java 5及其之后的版本中,基本類型和包裝類型之間的轉(zhuǎn)換會(huì)通過自動(dòng)裝箱、拆箱來自動(dòng)進(jìn)行,使得基本類型和包裝類型之間的使用更加方便

補(bǔ)充:

  • 包裝類Integer的創(chuàng)建方式

    • 1)Integer i1 = new Integer(3); 沒有高效的效果,new一次,創(chuàng)建一個(gè)包裝類對(duì)象

    • 2)Integer i2 = Integer.valueOf(3); 有高效的效果,數(shù)據(jù)在-128~127的范圍內(nèi),才有高效的效果

    • 3)Integer i3 = 3; 自動(dòng)裝箱:編譯器會(huì)把int類型5裝箱,變成Integer,底層調(diào)用Integer.valueOf(5)方法

  • 包裝類Double的創(chuàng)建方式

    • 1)Double d1 = new Double(2.7); 沒有高效的效果,new一次,創(chuàng)建一個(gè)包裝類對(duì)象

    • 2)Double d2 = Double.valueOf(2.7);這個(gè)也沒有高效的效果,只有Integer有

  • 自動(dòng)裝箱與自動(dòng)拆箱

    • Integer aInteger = 100; 自動(dòng)裝箱【編譯器會(huì)將int類型的100裝箱,變成Interger類型,底層調(diào)用 Interger.valueOf(100) 方法】

    • int a = aInteger; 自動(dòng)拆箱【編譯器會(huì)將包裝類型aInteger中的數(shù)據(jù)取出來,賦值給a,底層調(diào)用 aInteger.intValue() 方法】

  • String轉(zhuǎn)Integer、int、Double、double

String str1 = "7";
Integer m = Integer.valueOf(str1);
int n = Integer.parseInt(str1);

String str2 = "5.4";
Double d2 = Double.valueOf(str2);
double d3 = Double.parseDouble(str2);

//輸出  7,  7,  5.4,  5.4
System.out.println(m + ",  " + n + ",  " + d2 + ",  " + d3);

3.數(shù)據(jù)類型轉(zhuǎn)換

Java中的數(shù)據(jù)轉(zhuǎn)換主要分為兩種:自動(dòng)類型轉(zhuǎn)換(也稱為隱式轉(zhuǎn)換)、強(qiáng)制類型轉(zhuǎn)換(也稱為顯式轉(zhuǎn)換)。

轉(zhuǎn)換從低級(jí)到高級(jí):byte、short、char(三者同級(jí))——> int ——> long ——> float ——> double

  • 自動(dòng)類型轉(zhuǎn)換:代碼無需任何處理,在代碼編譯時(shí) 編譯器會(huì)自動(dòng)進(jìn)行處理。特點(diǎn)——低級(jí)轉(zhuǎn)換高級(jí)。
  • 強(qiáng)制類型轉(zhuǎn)換:需要在待轉(zhuǎn)換數(shù)據(jù)類型前 使用 (type)value, type是要強(qiáng)制類型轉(zhuǎn)換后的數(shù)據(jù)類型,可能會(huì)導(dǎo)致溢出或損失精度 。特點(diǎn)——高級(jí)轉(zhuǎn)換低級(jí)。

數(shù)據(jù)類型轉(zhuǎn)換必須滿足如下規(guī)則

  • 不能對(duì)boolean類型進(jìn)行類型轉(zhuǎn)換。

  • 不能把對(duì)象類型轉(zhuǎn)換成不相關(guān)類的對(duì)象。

  • 在把容量大的類型轉(zhuǎn)換為容量小的類型時(shí)必須使用強(qiáng)制類型轉(zhuǎn)換。

  • 轉(zhuǎn)換過程中可能導(dǎo)致溢出或損失精度,例如:

    int i =128;   
    byte b = (byte)i;
    

    因?yàn)?byte 類型是 8 位,最大值為127,所以當(dāng) int 強(qiáng)制轉(zhuǎn)換為 byte 類型時(shí),值 128 時(shí)候就會(huì)導(dǎo)致溢出。

  • 浮點(diǎn)數(shù)到整數(shù)的轉(zhuǎn)換是通過舍棄小數(shù)得到,而不是四舍五入,例如:

    (int)23.7 == 23;        
    (int)-45.89f == -45;
    

3.1 具體示例

int 和 long 互轉(zhuǎn)、int和double互轉(zhuǎn)、int和byte互轉(zhuǎn)、int和char互轉(zhuǎn)、int和String互轉(zhuǎn)

public static void main(String[] args) {
    int aInt = 20;
    long bLong = 50L;
    double cDouble = 4.8;

    //低優(yōu)先級(jí)類型數(shù)據(jù) + 高優(yōu)先級(jí)類型數(shù)據(jù) ——> 結(jié)果會(huì)自動(dòng)轉(zhuǎn)換為高優(yōu)先級(jí)數(shù)據(jù)
    long sum = aInt + bLong;

    //long -> int 需要強(qiáng)制類型轉(zhuǎn)換
    int d = (int) bLong;
    //double -> int 需要強(qiáng)制類型轉(zhuǎn)換
    int e = (int) cDouble;

    System.out.println("自動(dòng)類型轉(zhuǎn)換 int—>long:  " + sum);
    System.out.println("強(qiáng)制類型轉(zhuǎn)換 long—>int:  " + d);
    System.out.println("強(qiáng)制類型轉(zhuǎn)換 double—>int:  " + e);
    System.out.println();


    //int 和 byte 轉(zhuǎn)換
    byte fByte = (byte) aInt;  //高轉(zhuǎn)低,強(qiáng)轉(zhuǎn)
    int gInt = fByte;          //低轉(zhuǎn)高,自動(dòng)
    System.out.println("高轉(zhuǎn)低-強(qiáng)轉(zhuǎn),int->byte:  " + fByte);
    System.out.println("低轉(zhuǎn)高-自動(dòng),byte->int:  " + gInt);
    System.out.println();

    //int 和 char 轉(zhuǎn)換
    char hChar = 'a';
    int iInt = hChar;
    char j = (char) iInt;
    System.out.println("低轉(zhuǎn)高-自動(dòng),char->int:  " + iInt);
    System.out.println("高轉(zhuǎn)低-強(qiáng)轉(zhuǎn),int->char:  " + j);
    System.out.println();

    //int 和 String 轉(zhuǎn)換
    //int轉(zhuǎn)String: 1)使用String的ValueOf方法   2)直接使用 String類+ (即字符串拼接),任意字符串和其他類型"+" 都會(huì)把其他類型轉(zhuǎn)為字符串
    String str1 = String.valueOf(aInt);
    String str2 = "" + aInt;
    System.out.println("int轉(zhuǎn)String: " + str1 + ",  " + str2);
    //String轉(zhuǎn)int:調(diào)用包裝類的Integer.parseInt方法,當(dāng)字符串中包含非數(shù)字時(shí)會(huì)出錯(cuò)
    String str3 = "18";
    int k = Integer.parseInt(str3);
    System.out.println("String轉(zhuǎn)int: " + k);
    System.out.println();

    //byte 和 char 互轉(zhuǎn)
    byte m = (byte) hChar;
    char n = (char) m;
    System.out.println("char->byte,強(qiáng)轉(zhuǎn):  " + m);
    System.out.println("byte->char,強(qiáng)轉(zhuǎn):  " + n);
}

輸出:

自動(dòng)類型轉(zhuǎn)換 int—>long:  70
強(qiáng)制類型轉(zhuǎn)換 long—>int:  50
強(qiáng)制類型轉(zhuǎn)換 double—>int:  4

高轉(zhuǎn)低-強(qiáng)轉(zhuǎn),int->byte:  20
低轉(zhuǎn)高-自動(dòng),byte->int:  20

低轉(zhuǎn)高-自動(dòng),char->int:  97
高轉(zhuǎn)低-強(qiáng)轉(zhuǎn),int->char:  a

int轉(zhuǎn)String: 20,  20
String轉(zhuǎn)int: 18

char->byte,強(qiáng)轉(zhuǎn):  97
byte->char,強(qiáng)轉(zhuǎn):  a

總結(jié)

到此這篇關(guān)于Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型+四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Java數(shù)據(jù)類型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法

    SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • Java操作XML轉(zhuǎn)JSON數(shù)據(jù)格式詳細(xì)代碼實(shí)例

    Java操作XML轉(zhuǎn)JSON數(shù)據(jù)格式詳細(xì)代碼實(shí)例

    在Java中我們可以使用一些現(xiàn)成的庫來實(shí)現(xiàn)XML到JSON的轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Java操作XML轉(zhuǎn)JSON數(shù)據(jù)格式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié)

    Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié)

    這篇文章主要介紹了Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法

    Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法

    這篇文章主要給大家介紹了關(guān)于Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法,通過文中介紹的方法可以將時(shí)間分成我們想要的時(shí)間段,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下
    2021-07-07
  • java8 filter方法、Predicate接口的使用方式

    java8 filter方法、Predicate接口的使用方式

    這篇文章主要介紹了java8 filter方法、Predicate接口的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • JavaWeb BeanUtils信息類原理詳解

    JavaWeb BeanUtils信息類原理詳解

    這篇文章主要介紹了JavaWeb BeanUtils信息類原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java中while語句的簡(jiǎn)單知識(shí)及應(yīng)用

    Java中while語句的簡(jiǎn)單知識(shí)及應(yīng)用

    這篇文章主要給大家介紹了關(guān)于Java中while語句的簡(jiǎn)單知識(shí)及應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Jmeter多臺(tái)機(jī)器并發(fā)請(qǐng)求實(shí)現(xiàn)壓力性能測(cè)試

    Jmeter多臺(tái)機(jī)器并發(fā)請(qǐng)求實(shí)現(xiàn)壓力性能測(cè)試

    這篇文章主要介紹了Jmeter多臺(tái)機(jī)器并發(fā)請(qǐng)求實(shí)現(xiàn)壓力性能測(cè)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • apache zookeeper使用方法實(shí)例詳解

    apache zookeeper使用方法實(shí)例詳解

    這篇文章主要介紹了Apache Zookeeper使用方法的有關(guān)實(shí)例及詳解,包含了其簡(jiǎn)介和程序設(shè)計(jì)的一些思想,內(nèi)容豐富,需要的朋友可以參考下。
    2017-09-09
  • Java?注解@PostConstruct的原理及最佳使用場(chǎng)景分析

    Java?注解@PostConstruct的原理及最佳使用場(chǎng)景分析

    @PostConstruct?是?Java?中非常實(shí)用的注解,尤其是在?Spring?等框架中,它使得開發(fā)者可以方便地在?Bean?初始化后執(zhí)行額外的操作,本文給大家介紹@PostConstruct?的原理、使用場(chǎng)景及最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論