Java-基本數(shù)據(jù)類型

Java虛擬機(jī)中基本數(shù)據(jù)類型實(shí)踐

  • float 和 double 除以 0.0 不會(huì)崩潰 -> 遇見問題 0 / 0.0 或者 100 / 0.0 沒有拋出異常

    在寫代碼的的時(shí)候
    1. 任意整數(shù)(byte度气、short、int孝宗、long皆可)除以整數(shù)0結(jié)果為ArithmeticException是整;
        eg: 1 / 0 會(huì)拋出異常
    2. 任意數(shù)除以浮點(diǎn)0.0結(jié)果,沒有拋出異常作喘,查看源碼時(shí)發(fā)現(xiàn) 
        eg: 0 / 0.0 返回是 NaN 
        eg: 100 / 0.0 返回 Infinity
    
  • 解釋

    1. Java 的浮點(diǎn)類型采用 IEEE 754 浮點(diǎn)數(shù)格式惧笛。以 float 為例仲翎,浮點(diǎn)類型通常有兩個(gè) 0壶辜,+0.0F 以及 -0.0F悯舟。
    2. 前者在 Java 里是 0,后者是符號(hào)位為 1砸民、其他位均為 0 的浮點(diǎn)數(shù)抵怎,在內(nèi)存中等同于十六進(jìn)制整數(shù) 0x8000000(即 -0.0F 可通過 Float.intBitsToFloat(0x8000000) 求得)。盡管它們的內(nèi)存數(shù)值不同岭参,但是在 Java 中 +0.0F == -0.0F 會(huì)返回真反惕。
    3. 在有了 +0.0F 和 -0.0F 這兩個(gè)定義后,我們便可以定義浮點(diǎn)數(shù)中的正無窮及負(fù)無窮演侯。正無窮就是任意正浮點(diǎn)數(shù)(不包括 +0.0F)除以 +0.0F 得到的值姿染,而負(fù)無窮是任意正浮點(diǎn)數(shù)除以 -0.0F 得到的值。在 Java 中秒际,正無窮和負(fù)無窮是有確切的值悬赏,在內(nèi)存中分別等同于十六進(jìn)制整數(shù) 0x7F800000 和 0xFF800000狡汉。
    4. 你也許會(huì)好奇,既然整數(shù) 0x7F800000 等同于正無窮闽颇,那么 0x7F800001 又對(duì)應(yīng)什么浮點(diǎn)數(shù)呢盾戴?這個(gè)數(shù)字對(duì)應(yīng)的浮點(diǎn)數(shù)是 NaN(Not-a-Number)。
    5. 不僅如此兵多,[0x7F800001, 0x7FFFFFFF]和[0xFF800001, 0xFFFFFFFF]對(duì)應(yīng)的都是 NaN尖啡。當(dāng)然,一般我們計(jì)算得出的 NaN剩膘,比如說通過 +0.0F/+0.0F可婶,在內(nèi)存中應(yīng)為 0x7FC00000。這個(gè)數(shù)值援雇,我們稱之為標(biāo)準(zhǔn)的 NaN矛渴,而其他的我們稱之為不標(biāo)準(zhǔn)的 NaN。
    6. NaN 有一個(gè)有趣的特性:除了“!=”始終返回 true 之外惫搏,所有其他比較結(jié)果都會(huì)返回 false具温。
      舉例來說,
      “NaN<1.0F”返回 false筐赔,
      而“NaN>=1.0F”同樣返回 false铣猩。
      對(duì)于任意浮點(diǎn)數(shù) f,不管它是 0 還是 NaN茴丰,
          1.  “f!=NaN”始終會(huì)返回 true达皿,
          2.  而“f==NaN”始終會(huì)返回 false
      
    7. 因此,我們?cè)诔绦蚶镒龈↑c(diǎn)數(shù)比較的時(shí)候贿肩,需要考慮上述特性
  • 案例

/**
 * Java 數(shù)據(jù)/0 的一些分析
 * 1. 任意整數(shù)(byte峦椰、short、int汰规、long皆可)除以整數(shù)0結(jié)果為ArithmeticException汤功;
 * 2. 0除以浮點(diǎn)0結(jié)果為NAN,細(xì)分的話包括以下三種情況:
 * **** 1. 0/0.0
 * **** 2. 0.0/0.0
 * **** 3. 0.0/0 雖然除的是個(gè)整數(shù)0溜哮,但在運(yùn)算過程中發(fā)生了類型轉(zhuǎn)化變成了浮點(diǎn)0
 * 3. 任意數(shù)除以浮點(diǎn)0結(jié)果為Infinity/-Infinity滔金。
 * 4. java中浮點(diǎn)數(shù)0并非一個(gè)準(zhǔn)確值,而是一個(gè)無限接近0的數(shù)
 * 5. Java float 和 double 類型茂嗓,
 *    1. 就像其他任何語言(以及幾乎任何硬件FP單元)一樣餐茵,實(shí)現(xiàn)了浮點(diǎn)數(shù)學(xué)的IEEE 754標(biāo)準(zhǔn),它要求除以零以返回特殊的“無窮大”值述吸。拋出異常實(shí)際上會(huì)違反該標(biāo)準(zhǔn)忿族。
 *    2. 整數(shù)算術(shù)(由Java和大多數(shù)其他語言和硬件實(shí)現(xiàn)為二進(jìn)制補(bǔ)碼表示)是不同的,沒有特殊的無窮大或NaN值,因此拋出異常是一種有用的行為肠阱。
 *    3. Float 和 Double 的包裝類中定義了: NaN  POSITIVE_INFINITY NEGATIVE_INFINITY
 */
public class TestFloatDouble {

    public static void main(String[] args) {
        float byteNum = ((byte) 1) / 0.0f;
        float byteNumZero = ((byte) 0) / 0.0f;
        System.out.println("byte 非0 / 0.0f = " + byteNum + " byte 0 / 0.0f = " + byteNumZero);

        float shortNum = ((short) 1) / 0.0f;
        float shortNumZero = ((short) 0) / 0.0f;
        System.out.println("short 非0 / 0.0f = " + shortNum + " short 0 / 0.0f = " + shortNumZero);

        float intNum = 1 / 0.0f;
        float intNumZero = 0 / 0.0f;
        System.out.println("int 非0 / 0.0f = " + intNum + " int 0 / 0.0f = " + intNumZero);

        float longNum = 1l / 0.0f;
        float longNumZero = 0l / 0.0f;
        System.out.println("long 非0 / 0.0f = " + longNum + " long 0 / 0.0f = " + longNumZero);

        float floatNum = 1f / 0.0f;
        float floatNumZero = 0f / 0.0f;
        System.out.println("float 非0 / 0.0f = " + floatNum + " float 0 / 0.0f = " + floatNumZero);

        float charNum = (char)1 / 0.0f;
        float charNumZero = (char)0f / 0.0f;
        System.out.println("char 非0 / 0.0f = " + charNum + " char 0 / 0.0f = " + charNumZero);

        double doubleNum = 1.0d / 0.0d;
        double doubleNumZero = 0.0d / 0.0d;
        System.out.println("double 非0 / 0.0f = " + doubleNum + " double 0 / 0.0f = " + doubleNumZero);

        float temp = (float) 139 / 190;
        float currentProgress = temp * 100;
        System.out.println(currentProgress);

        float tem = 222 / 0.0f;
        System.out.println("tem " + tem);
        float temp1 = 0.0f / 0.0f;
        System.out.println("tem1 " + temp1);
        System.out.println("Float.NaN " + Float.NaN);
        System.out.println("Float temp1 == NaN " + (temp1 == Float.NaN));
        System.out.println("Float temp1 is NaN " + Float.isNaN(temp1));
        System.out.println("Float intBitsToFloat " + Float.intBitsToFloat(0x7fc00000));

        float negativeInfinity = Float.NEGATIVE_INFINITY;
        float positiveInfinity = Float.POSITIVE_INFINITY;
        System.out.println("Float negativeInfinity " + negativeInfinity + " positiveInfinity " + positiveInfinity);
        
        System.out.println("------double的處理類似于float---------");
    }
}

注意

  1. 自己學(xué)習(xí)票唆,不為盈利
  2. 如有侵權(quán),可以聯(lián)系刪除
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屹徘,一起剝皮案震驚了整個(gè)濱河市走趋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噪伊,老刑警劉巖簿煌,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鉴吹,居然都是意外死亡姨伟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門豆励,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夺荒,“玉大人,你說我怎么就攤上這事良蒸〖级螅” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵嫩痰,是天一觀的道長剿吻。 經(jīng)常有香客問我,道長串纺,這世上最難降的妖魔是什么丽旅? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纺棺,結(jié)果婚禮上榄笙,老公的妹妹穿的比我還像新娘。我一直安慰自己五辽,他們只是感情好办斑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布外恕。 她就那樣靜靜地躺著杆逗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳞疲。 梳的紋絲不亂的頭發(fā)上罪郊,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音尚洽,去河邊找鬼悔橄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癣疟。 我是一名探鬼主播挣柬,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼睛挚!你這毒婦竟也來了邪蛔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤扎狱,失蹤者是張志新(化名)和其女友劉穎侧到,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淤击,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匠抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了污抬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汞贸。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖印机,靈堂內(nèi)的尸體忽然破棺而出著蛙,到底是詐尸還是另有隱情,我是刑警寧澤耳贬,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布踏堡,位于F島的核電站,受9級(jí)特大地震影響咒劲,放射性物質(zhì)發(fā)生泄漏顷蟆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一腐魂、第九天 我趴在偏房一處隱蔽的房頂上張望帐偎。 院中可真熱鬧,春花似錦蛔屹、人聲如沸削樊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漫贞。三九已至,卻和暖如春育叁,著一層夾襖步出監(jiān)牢的瞬間迅脐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工豪嗽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谴蔑,地道東北人豌骏。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像隐锭,于是被迫代替她去往敵國和親窃躲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345