2.Java基本類型與包裝類型

java中的基本類型包含以下幾個:
byte弄砍、short、int输涕、long输枯、float、double占贫、char、boolean

整型

其中byte先口、short型奥、int、long都是表示整數(shù)的碉京,只不過他們的取值范圍不一樣

byte的取值范圍為-128~127厢汹,占用1個字節(jié)(-2的7次方到2的7次方-1)

short的取值范圍為-32768~32767,占用2個字節(jié)(-2的15次方到2的15次方-1)

int的取值范圍為(-2147483648~2147483647)谐宙,占用4個字節(jié)(-2的31次方到2的31次方-1)

long的取值范圍為(-9223372036854774808~9223372036854774807)烫葬,占用8個字節(jié)(-2的63次方到2的63次方-1)

可以看到byte和short的取值范圍比較小,而long的取值范圍太大,占用的空間多搭综,基本上int可以滿足我們的日常的計算了垢箕,而且int也是使用的最多的整型類型了。

在通常情況下兑巾,如果java中出現(xiàn)了一個整數(shù)數(shù)字比如35条获,那么這個數(shù)字就是int型的,如果我們希望它是byte型的蒋歌,可以在數(shù)據(jù)后加上大寫的B:35B帅掘,表示它是byte型的,同樣的35S表示short型堂油,35L表示long型的修档,表示int我們可以什么都不用加,但是如果要表示long型的府框,就一定要在數(shù)據(jù)后面加“L”吱窝。

浮點型

float和double是表示浮點型的數(shù)據(jù)類型,他們之間的區(qū)別在于他們的精確度不同

float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方寓免,同樣癣诱,e-45表示乘以10的負45次方)占用4個字節(jié)

double 1.797693e+308~ 4.9000000e-324 占用8個字節(jié)

double型比float型存儲范圍更大,精度更高袜香,所以通常的浮點型的數(shù)據(jù)在不聲明的情況下都是double型的撕予,如果要表示一個數(shù)據(jù)是float型的,可以在數(shù)據(jù)后面加上“F”蜈首。

浮點型的數(shù)據(jù)是不能完全精確的实抡,所以有的時候在計算的時候可能會在小數(shù)點最后幾位出現(xiàn)浮動,這是正常的欢策。

boolean型(布爾型)

這個類型只有兩個值吆寨,true和false(真和非真)

char型(文本型)

用于存放字符的數(shù)據(jù)類型,占用2個字節(jié)踩寇,采用unicode編碼啄清,它的前128字節(jié)編碼與ASCII兼容

字符的存儲范圍在\u0000~\uFFFF,在定義字符型的數(shù)據(jù)時候要注意加' '俺孙,比如 '1'表示字符'1'而不是數(shù)值1

其中最常用的是 int 辣卒、double、float睛榄。一般用不到long和double荣茫,主要是這兩個數(shù)字的精度都非常高,一般的項目是用不到這些大數(shù)字的场靴。前一段時間facebook被爆出用戶id超出最大值啡莉,原因就是facebook的用戶id采用mysql的自增數(shù)字港准,int型,最大值為2147483648咧欣,也就是21億多浅缸,facebook的注冊用戶已經(jīng)超過這個量了,當初設(shè)計時肯定沒想到會超過這么大的數(shù)该押,以后整體調(diào)整程序疗杉,改為long型了,這下估計一百年也不會超過了蚕礼。

基本類型包裝器類型

boolean->Boolean

char->Character

int->Integer

byte->Byte

short->Short

long->Long

float->Float

double->Double

常見的類型之間的轉(zhuǎn)變都非常簡單烟具,這地方只想說一下什么時候用原生類型,什么時候用包裝類型奠蹬。
這一塊因為每個人的理解都不一樣朝聋,我只是描述一下我的理解,沒有對錯之分囤躁。

在Hibernate的實體對象中冀痕,要求每個字段都得是包裝類型,因為要涉及對象的equals比較狸演,原生類型是沒有這些方法的言蛇,所以必須得是包裝類型。
普通的model/VO/POJO/DTO中宵距,如果這個字段有可能為空或null腊尚,那這個字段就定義為包裝類型,如果這個字段肯定是數(shù)值類型不可能為null满哪,比如自增的主鍵id婿斥,則可以為原生類型。
這一塊要強調(diào)一下哨鸭,不能任何地方都用包裝類型民宿,因為如果數(shù)值為包裝類型,進行兩個數(shù)值的比較時會出現(xiàn)錯誤像鸡,舉例如下
參見com.critc.BasicTypeTest

/**
 * Created by 孔垂云 on 2017/4/15.
 * java 基本類型和包裝類型的區(qū)別
 * java里面Integer在-128-127之間活鹰,兩個Integer對象是可以直接相等的,如果不在這個范圍內(nèi)只估,需要用equals來進行比較
 */
public class BasicTypeTest{
    public static void main(String[] args) {
        int a1=127,b1=127,a2=128,b2=128;
        System.out.println(a1==b1);
        System.out.println(a2==b2);

        Integer a3=127,b3=127,a4=128,b4=128;
        System.out.println(a3==b3);
        System.out.println(a4==b4);//兩個值不能直接進行==比較
        System.out.println(a3.equals(b3));
        System.out.println(a4.equals(b4));
    }
}

BigDecimal

涉及數(shù)據(jù)類型志群,還涉及一個一般項目用不到的類型,BigDecimal仅乓,這個不能稱之為數(shù)據(jù)類型,應(yīng)該叫對象蓬戚,用于銀行類金額計算的夸楣。
參見com.critc.BigDecimalTest

 public static void main(String[] args) {
        System.out.println(2.06 + 2.01);

        BigDecimal a1=new BigDecimal(2.06);
        BigDecimal b1=new BigDecimal(2.01);
        System.out.println(a1.add(b1));//錯誤

        BigDecimal a2=new BigDecimal(String.valueOf(2.06));
        BigDecimal b2=new BigDecimal(String.valueOf(2.01));
        System.out.println(a2.add(b2));

        //精度計算
        BigDecimal c2=a2.add(b2).setScale(1,BigDecimal.ROUND_CEILING);
        System.out.println(c2);
    }

主要講兩點

  • 定義BigDecimal的時候,最好用 new BigDecimal(字符串),用字符串來定義豫喧,如果是int或float或double都轉(zhuǎn)成string
  • 計算精度時一定要區(qū)分精度的類型石洗,是向上取,還是向下取紧显。因為銀行計算的精度默認都是元后面6位小數(shù)讲衫,而且都是舍棄后面的所有小數(shù),不是傳統(tǒng)的四舍五入孵班。

銀行的規(guī)則一定要清楚涉兽,多出來的錢都是銀行的,哪怕精確到小數(shù)點后面六位篙程。

源碼下載

本例子詳細源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枷畏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虱饿,更是在濱河造成了極大的恐慌拥诡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氮发,死亡現(xiàn)場離奇詭異渴肉,居然都是意外死亡,警方通過查閱死者的電腦和手機爽冕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門仇祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扇售,你說我怎么就攤上這事前塔。” “怎么了承冰?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵华弓,是天一觀的道長。 經(jīng)常有香客問我困乒,道長寂屏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任娜搂,我火速辦了婚禮迁霎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘百宇。我一直安慰自己考廉,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布携御。 她就那樣靜靜地躺著昌粤,像睡著了一般既绕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涮坐,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天凄贩,我揣著相機與錄音,去河邊找鬼袱讹。 笑死疲扎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捷雕。 我是一名探鬼主播椒丧,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼非区!你這毒婦竟也來了瓜挽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤征绸,失蹤者是張志新(化名)和其女友劉穎久橙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體管怠,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡淆衷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渤弛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祝拯。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖她肯,靈堂內(nèi)的尸體忽然破棺而出佳头,到底是詐尸還是另有隱情,我是刑警寧澤晴氨,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布康嘉,位于F島的核電站,受9級特大地震影響籽前,放射性物質(zhì)發(fā)生泄漏亭珍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一枝哄、第九天 我趴在偏房一處隱蔽的房頂上張望肄梨。 院中可真熱鬧,春花似錦挠锥、人聲如沸众羡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粱侣。三九已至辆毡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甜害,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工球昨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尔店,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓主慰,卻偏偏與公主長得像嚣州,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子共螺,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容