java長(zhǎng)整除問(wèn)題淺談
public class Change{
public static void main(String args[]){
final long L1=24* 60 * 60 * 1000 * 1000;
final long L2=24* 60 * 60 * 1000;
System.out.println(L1/L2);
}
}
/**
* output: 5
*/
為什么輸出的是5呢?
再看下面的代碼輸出:
public class Change{
public static void main(String args[]){
final long L1=24L* 60 * 60 * 1000 * 1000;
final long L2=24L* 60 * 60 * 1000;
System.out.println(L1/L2);
}
}
/**
* output: 1000
*/
這個(gè)的輸出才是我們想要的結(jié)果。到底發(fā)生了什么?
這是因?yàn)槌?shù)L1的計(jì)算“確實(shí)”溢出了。盡管計(jì)算的結(jié)果適合放入long中,并且其空間還有富余,但這個(gè)結(jié)果并不適合放入int中。這個(gè)計(jì)算完全是以int運(yùn)算來(lái)執(zhí)行的,并且只有在運(yùn)算完成之后,其結(jié)果才被提升到long,而此時(shí)已經(jīng)太遲了:計(jì)算已經(jīng)溢出了,它返回的是一個(gè)小了200倍的數(shù)值。從int到long是一種拓寬原始類型轉(zhuǎn)換,它保留了(不正確的)數(shù)值。這個(gè)值之后被L2整除,而L2的計(jì)算是正確的,因?yàn)樗m合int運(yùn)算。這樣整除的結(jié)果就得到了5。
那為什么是int運(yùn)算來(lái)執(zhí)行的呢?因?yàn)樗谐嗽谝黄鸬囊蜃佣际莍nt數(shù)值。當(dāng)你將兩個(gè)int數(shù)值相乘時(shí),你將得到另一個(gè)int數(shù)值。java不具有目標(biāo)確定類型的特性,只是一種語(yǔ)言特性,其含義是指存儲(chǔ)結(jié)果的變量的類型會(huì)影響到計(jì)算所使用的類型。
通過(guò)使用long常量來(lái)替代int常量作為每一個(gè)乘積的第一個(gè)因子,就可以很容易的訂正這個(gè)程序。
這個(gè)教訓(xùn)很簡(jiǎn)單:當(dāng)你在操作很大的數(shù)字時(shí),千萬(wàn)要提防溢出,即使用來(lái)保存結(jié)果的變量已顯得足夠大,也并不意味著產(chǎn)生結(jié)果的計(jì)算具有正確的類型。當(dāng)你拿不準(zhǔn)時(shí),就使用long運(yùn)算來(lái)執(zhí)行整個(gè)計(jì)算。
相關(guān)文章
idea mac版打開(kāi)是出現(xiàn)打開(kāi)失敗問(wèn)題及解決
這篇文章主要介紹了idea mac版打開(kāi)是出現(xiàn)打開(kāi)失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09詳解如何通過(guò)Java實(shí)現(xiàn)壓縮PDF文檔
PDF文檔是我們?nèi)粘^k公中使用最頻繁的文檔格式。但因?yàn)榇蠖鄶?shù)PDF文檔都包含很多頁(yè)面圖像或大量圖片,這就導(dǎo)致PDF文檔過(guò)大,處理起來(lái)較為麻煩。本文將介紹如何通過(guò)Java應(yīng)用程序壓縮PDF文檔,需要的可以了解一下2022-12-12SpringBoot和Vue.js實(shí)現(xiàn)的前后端分離的用戶權(quán)限管理系統(tǒng)
本文主要介紹了SpringBoot和Vue.js實(shí)現(xiàn)的前后端分離的用戶權(quán)限管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Springcloud Config配置中心使用與相關(guān)介紹
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-09-09最值得Java開(kāi)發(fā)者收藏的網(wǎng)站
這篇文章主要為大家分享了最值得Java開(kāi)發(fā)者收藏的11個(gè)網(wǎng)站,幫助Java開(kāi)發(fā)者提升編程能力2016-11-11Spring cloud alibaba之Gateway網(wǎng)關(guān)功能特征詳解
spring cloud gateway是spring cloud推出的第二代網(wǎng)關(guān),是由WebFlux+Netty+Reactor實(shí)現(xiàn)的響應(yīng)式的API網(wǎng)關(guān),它不能在傳統(tǒng)的servlet容器中工作,也不能構(gòu)建成war包,接下來(lái)通過(guò)本文給大家分享Spring cloud alibaba--Gateway網(wǎng)關(guān),需要的朋友可以參考下2021-08-08