最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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ù)傳遞時,以拷貝引用地址的方式傳遞給接收變量,而非復(fù)制整個數(shù)據(jù)本體。除八大基本數(shù)據(jù)類型之外的所有數(shù)據(jù)類型,都為引用數(shù)據(jù)類型。所有引用數(shù)據(jù)類型的默認(rèn)值都為null。
  • 為了基本數(shù)據(jù)類型可以與引用數(shù)據(jù)類型互相轉(zhuǎn)換、以利用彼此的特性,java為每一種基本數(shù)據(jù)類型提供了相應(yīng)的包裝類。包裝類對基本數(shù)據(jù)類型進(jìn)行了封裝,提供了豐富的功能,包裝類是基本類型的拓展
  • 包裝類是引用類型的一種,包裝類與基本數(shù)據(jù)類型一一對應(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ù)類型詳解

基本類型存儲大小初始化默認(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ù)類型可以儲存任何字符。
float、double不能用來表示精確的值,運(yùn)算不精確——>解決方案:BigDecimal。創(chuàng)建BigDecimal對象的方式:

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

對于數(shù)值類型的基本類型的取值范圍,我們無需強(qiáng)制去記憶,因?yàn)樗鼈兊闹刀家呀?jīng)以常量的形式定義在對應(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ū)別

  • 存儲方式:基本數(shù)據(jù)類型直接存儲值,而引用數(shù)據(jù)類型存儲的是對象的引用(內(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ù)類型會有默認(rèn)值,例如int類型的默認(rèn)值是0,boolean類型的默認(rèn)值是false。而引用數(shù)據(jù)類型的默認(rèn)值是null,表示沒有引用指向任何對象
  • 復(fù)制操作:基本數(shù)據(jù)類型進(jìn)行復(fù)制時,會復(fù)制該變量的值。而引用數(shù)據(jù)類型進(jìn)行復(fù)制時,只會復(fù)制對象的引用,兩個變量指向同一個對象
  • 參數(shù)傳遞:基本數(shù)據(jù)類型作為方法的參數(shù)傳遞時,傳遞的是值的副本,不會修改原始值。而引用數(shù)據(jù)類型作為方法的參數(shù)傳遞時,傳遞的是對象的引用,可以修改對象的屬性或狀態(tài)
  • 比較操作:基本數(shù)據(jù)類型使用==進(jìn)行比較時,比較的是值是否相等。而引用數(shù)據(jù)類型使用==進(jìn)行比較時,比較的是引用是否指向同一個對象,如果要比較對象的內(nèi)容是否相同,需要使用equals()方法

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

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

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

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

補(bǔ)充:

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

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

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

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

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

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

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

  • 自動裝箱與自動拆箱

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

    • int a = aInteger; 自動拆箱【編譯器會將包裝類型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)換主要分為兩種:自動類型轉(zhuǎn)換(也稱為隱式轉(zhuǎn)換)、強(qiáng)制類型轉(zhuǎn)換(也稱為顯式轉(zhuǎn)換)。

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

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

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

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

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

  • 在把容量大的類型轉(zhuǎn)換為容量小的類型時必須使用強(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 類型時,值 128 時候就會導(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)先級類型數(shù)據(jù) + 高優(yōu)先級類型數(shù)據(jù) ——> 結(jié)果會自動轉(zhuǎn)換為高優(yōu)先級數(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("自動類型轉(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)高,自動
    System.out.println("高轉(zhuǎn)低-強(qiáng)轉(zhuǎn),int->byte:  " + fByte);
    System.out.println("低轉(zhuǎn)高-自動,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)高-自動,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類+ (即字符串拼接),任意字符串和其他類型"+" 都會把其他類型轉(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ù)字時會出錯
    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);
}

輸出:

自動類型轉(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)高-自動,byte->int:  20

低轉(zhuǎn)高-自動,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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程事務(wù)管理的實(shí)現(xiàn)

    Java多線程事務(wù)管理的實(shí)現(xiàn)

    本文主要介紹了Java多線程事務(wù)管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • IntelliJ?IDEA?無法識別?Maven?SNAPSHOT?依賴但?Maven?編譯正常的根本原因

    IntelliJ?IDEA?無法識別?Maven?SNAPSHOT?依賴但?Maven?編譯正常的根本原因

    本文描述了在IntelliJ IDEA中使用Maven SNAPSHOT依賴時遇到的編譯正常但I(xiàn)DEA中無法識別的問題,根本原因在于Maven緩存機(jī)制及IDEA的項(xiàng)目模型緩存未更新,解決方案包括手動修改libraries.xml文件或觸發(fā)MavenReload
    2026-05-05
  • Spring使用RestTemplate和Junit單元測試的注意事項(xiàng)

    Spring使用RestTemplate和Junit單元測試的注意事項(xiàng)

    這篇文章主要介紹了Spring使用RestTemplate和Junit單元測試的注意事項(xiàng),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot整合Redis實(shí)現(xiàn)訂單超時自動刪除功能

    SpringBoot整合Redis實(shí)現(xiàn)訂單超時自動刪除功能

    在電商、外賣等場景中,訂單超時未支付是常見業(yè)務(wù)場景,傳統(tǒng)方案通過定時任務(wù)輪詢數(shù)據(jù)庫,但存在??延遲高??、??數(shù)據(jù)庫壓力大等問題,Redis的??過期鍵自動刪除機(jī)制??,可完美解決這一痛點(diǎn),所以本文給大家介紹了SpringBoot整合Redis實(shí)現(xiàn)訂單超時自動刪除
    2025-07-07
  • Spring bean對象實(shí)例化實(shí)現(xiàn)過程圖解

    Spring bean對象實(shí)例化實(shí)現(xiàn)過程圖解

    這篇文章主要介紹了Spring bean對象實(shí)例化實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Spring Boot文件上傳原理與實(shí)現(xiàn)詳解

    Spring Boot文件上傳原理與實(shí)現(xiàn)詳解

    這篇文章主要介紹了Spring Boot 文件上傳原理與實(shí)現(xiàn)詳解,前端文件上傳是面向多用戶的,多用戶之間可能存在上傳同一個名稱、類型的文件;為了避免文件沖突導(dǎo)致的覆蓋問題這些應(yīng)該在后臺進(jìn)行解決,需要的朋友可以參考下
    2024-01-01
  • Java編程中線程池的基本概念和使用

    Java編程中線程池的基本概念和使用

    這篇文章主要介紹了Java編程中線程池的基本概念和使用,多線程編程是使Java程序?qū)崿F(xiàn)并發(fā)的一個重要手段,需要的朋友可以參考下
    2015-11-11
  • Spring?boot?運(yùn)用策略模式實(shí)現(xiàn)避免多次使用if的操作代碼

    Spring?boot?運(yùn)用策略模式實(shí)現(xiàn)避免多次使用if的操作代碼

    這篇文章主要介紹了Spring?boot?運(yùn)用策略模式實(shí)現(xiàn),避免多次使用if,使用策略模式后,新加一種支付策略時,只需要在策略枚舉中添加新加的策略信息,外加一個策略類即可,而不再需要添加新的if判斷,需要的朋友可以參考下
    2022-08-08
  • springboot優(yōu)雅獲取前端參數(shù)的方法詳解

    springboot優(yōu)雅獲取前端參數(shù)的方法詳解

    現(xiàn)在的項(xiàng)目基本上都是前后端分離的項(xiàng)目,如何打通前后端,接收前端傳過來的參數(shù)呢,這篇文章小編就來和大家詳細(xì)介紹一下springboot如何優(yōu)雅的獲取前端參數(shù)吧
    2024-03-03
  • 詳解Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片

    詳解Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片

    這篇文章主要介紹了Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論

广德县| 温宿县| 光泽县| 凉城县| 延吉市| 敖汉旗| 永吉县| 承德市| 昔阳县| 玛沁县| 湖南省| 老河口市| 郑州市| 镇江市| 仁布县| 甘泉县| 高密市| 普宁市| 安溪县| 溧水县| 瑞安市| 富源县| 宝坻区| 巩留县| 海盐县| 双城市| 莱西市| 大田县| 宜黄县| 伊川县| 怀安县| 库尔勒市| 康平县| 灵石县| 阳泉市| 定远县| 朔州市| 合江县| 新巴尔虎左旗| 抚顺市| 阿瓦提县|