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

Java基礎(chǔ)之隱式轉(zhuǎn)換vs強(qiáng)制轉(zhuǎn)換

 更新時(shí)間:2015年12月28日 14:34:53   投稿:mrr  
這篇文章主要介紹了Java基礎(chǔ)之隱式轉(zhuǎn)換vs強(qiáng)制轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下

Java中,經(jīng)常可以遇到類型轉(zhuǎn)換的場(chǎng)景,從變量的定義到復(fù)制、數(shù)值變量的計(jì)算到方法的參數(shù)傳遞、基類與派生類間的造型等,隨處可見(jiàn)類型轉(zhuǎn)換的身影。Java中的類型轉(zhuǎn)換在Java編碼中具有重要的作用。

在定義變量時(shí),有許多要注意的問(wèn)題,一不小心就會(huì)出現(xiàn)損失精度或者不兼容類型等問(wèn)題。

例如:

    1.定義長(zhǎng)整型數(shù)據(jù)時(shí),必須加后綴l或L

              long l =123456789012345L

    2.定義單精度類型時(shí)(7-8位有效數(shù)字),必須加后綴 f 或 F

              float f = 12.5F

          3. boolean類型不可以轉(zhuǎn)換為其它的數(shù)據(jù)類型。

這其中,我們常常會(huì)遇到數(shù)據(jù)類型的轉(zhuǎn)換問(wèn)題,最為常見(jiàn)的要屬隱式轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換了,我們來(lái)分析一下。

隱式轉(zhuǎn)換

特征:

從小到大,可以隱式轉(zhuǎn)換,數(shù)據(jù)類型將自動(dòng)提升。

byte,short,char -->int  -->long -->float -->double

注意:long是8個(gè)字節(jié),float是4個(gè)字節(jié)。

long是整數(shù),float是浮點(diǎn)型,整數(shù)和浮點(diǎn)數(shù)的存儲(chǔ)規(guī)則不一樣,記住一點(diǎn)long的范圍是小于float的。

例 :

byte a=10;
int b=a;

當(dāng)編譯intb=a 時(shí),  a隱式轉(zhuǎn)換為int類型。

強(qiáng)制轉(zhuǎn)換

特征:

     從大到?。ㄈ绻忝鞔_知道數(shù)據(jù)是可以用該數(shù)據(jù)類型來(lái)表示的,可以用強(qiáng)制轉(zhuǎn)換)

格式:

    (轉(zhuǎn)換后的數(shù)據(jù)類型)變量或者值。

注:一般情況下,根本不推薦使用強(qiáng)制類型轉(zhuǎn)換。

           例1 :

int a=10;
byte b=(byte)a;

當(dāng)編譯 byte b=(byte)a時(shí), a被強(qiáng)制轉(zhuǎn)換為byte類型。

例2:

class QiangZhiDemo 
{ 
  public static void main(String[] args) 
  { 
    byte b=(byte)130; 
    System.out.println(b); //打印結(jié)果-126 
  }   
} 

解析:

數(shù)據(jù)130默認(rèn)的是int類型的十進(jìn)制數(shù)據(jù),

第一步:十進(jìn)制130轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)。

  10000010

第二步:130在內(nèi)存中的表示形式如下

原碼:0000000000000000 00000000 10000010

第三步:求int130的補(bǔ)碼

因?yàn)?30是正數(shù),所以,反碼和補(bǔ)碼都和原碼一致。

補(bǔ)碼:0000000000000000 00000000 10000010

第四步:對(duì)補(bǔ)碼進(jìn)行截取,只剩下最后8位。

(byte)130 的補(bǔ)碼為:10000010

第五步:把該補(bǔ)碼轉(zhuǎn)化為原碼。

由于符號(hào)位(第一位)是1,故該數(shù)為負(fù)數(shù),

反碼:10000001     (補(bǔ)碼-1)

原碼:11111110     (符號(hào)位不變,數(shù)據(jù)位取反)

轉(zhuǎn)化為十進(jìn)制為 -126,所以最終打印-126。

     例3 :

shorts = 1;
s= s +1;   

shorts = 1;
s+=1;   

有問(wèn)題嗎?為什么呢?

     解析:

第一程序會(huì)報(bào)錯(cuò):錯(cuò)誤:不兼容的類型:從int轉(zhuǎn)換到short可能會(huì)有損失     

原因:s=s+1;s+1會(huì)隱式轉(zhuǎn)換為int類型,當(dāng)把一個(gè)int類型賦值給short類型是,可能會(huì)損失。

第二個(gè)程序可以編譯運(yùn)行。    

原因:s+=1,雖然可以看做s=s+1,但是還是有區(qū)別的,s+=1中有一個(gè)強(qiáng)制轉(zhuǎn)換,即s=(short)(s+1),會(huì)把s+1的值強(qiáng)制轉(zhuǎn)換為short類型,故不會(huì)報(bào)錯(cuò)。

小結(jié):

數(shù)據(jù)類型轉(zhuǎn)換的問(wèn)題如果發(fā)生在一些小程序上,我們或許能夠一眼看出,可是當(dāng)編寫(xiě)一個(gè)龐大的系統(tǒng)時(shí),擁有龐大數(shù)據(jù)量時(shí),這些小小的問(wèn)題可能導(dǎo)致系統(tǒng)出錯(cuò)甚至崩潰,所以前期代碼編寫(xiě)的嚴(yán)謹(jǐn)性就得靠我們自己把握了。

以上內(nèi)容給大家介紹了Java基礎(chǔ)之隱式轉(zhuǎn)換vs強(qiáng)制轉(zhuǎn)換,希望大家喜歡。

相關(guān)文章

  • mybatis in查詢傳入String方式

    mybatis in查詢傳入String方式

    這篇文章主要介紹了mybatis in查詢傳入String方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)

    SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)

    在Spring Cloud項(xiàng)目中,使用Java和Redis結(jié)合實(shí)現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,分布式鎖的使用能夠在多個(gè)實(shí)例同時(shí)提交訂單時(shí),僅有一個(gè)實(shí)例可以成功進(jìn)行操作,本文給大家介紹Spring,Cloud中的分布式鎖用法詳解(Java+Redis SETNX命令),感興趣的朋友一起看看吧
    2023-10-10
  • SpringBoot集成Mybatis的實(shí)現(xiàn)步驟

    SpringBoot集成Mybatis的實(shí)現(xiàn)步驟

    這篇文章主要介紹了SpringBoot集成Mybatis的實(shí)現(xiàn)步驟,本文通過(guò)SpringBoot +MyBatis 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)學(xué)生表的查詢操作,需要的朋友可以參考下
    2020-12-12
  • Java實(shí)現(xiàn)批量操作Excel的示例詳解

    Java實(shí)現(xiàn)批量操作Excel的示例詳解

    在操作Excel的場(chǎng)景中,通常會(huì)有一些針對(duì)Excel的批量操作,以GcExcel為例,為大家詳細(xì)介紹一下Java是如何實(shí)現(xiàn)批量操作Excel的,需要的可以參考一下
    2023-07-07
  • Spring?Boot整合阿里開(kāi)源中間件Canal實(shí)現(xiàn)數(shù)據(jù)增量同步

    Spring?Boot整合阿里開(kāi)源中間件Canal實(shí)現(xiàn)數(shù)據(jù)增量同步

    這篇文章主要為大家介紹了Spring?Boot整合阿里開(kāi)源中間件Canal實(shí)現(xiàn)數(shù)據(jù)增量同步示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Spring?Boot教程之必須了解的核心概念

    Spring?Boot教程之必須了解的核心概念

    這篇文章主要介紹了Spring?Boot系列教程中的關(guān)于學(xué)習(xí)Spring?Boot必須了解的核心概念的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(6)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(6)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • 在springboot中使用攔截器的步驟詳解

    在springboot中使用攔截器的步驟詳解

    攔截器Interceptor,是SpringMVC中的核心內(nèi)容,在SpringBoot中使用Interceptor,同時(shí)采用全注解開(kāi)發(fā),這篇文章主要介紹了在springboot中使用攔截器的步驟,需要的朋友可以參考下
    2022-01-01
  • 基于SpringBoot實(shí)現(xiàn)Web應(yīng)用的登錄與退出功能

    基于SpringBoot實(shí)現(xiàn)Web應(yīng)用的登錄與退出功能

    登錄與退出功能作為 Web 應(yīng)用中的基礎(chǔ)且重要的組成部分,直接關(guān)系到用戶的安全和隱私保護(hù),所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)Web應(yīng)用的登錄與退出功能,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-04-04
  • Java?FTP協(xié)議實(shí)現(xiàn)文件下載功能

    Java?FTP協(xié)議實(shí)現(xiàn)文件下載功能

    FTP(File?Transfer?Protocol)就是文件傳輸協(xié)議。通過(guò)FTP客戶端從遠(yuǎn)程FTP服務(wù)器上拷貝文件到本地計(jì)算機(jī)稱為下載,將本地計(jì)算機(jī)上的文件復(fù)制到遠(yuǎn)程FTP服務(wù)器上稱為上傳,上傳和下載是FTP最常用的兩個(gè)功能
    2022-11-11

最新評(píng)論