變量與數(shù)據(jù)類(lèi)型

變量

變量是利用聲明的方式陶夜,將內(nèi)存中的某個(gè)塊保留下來(lái)以供程序使用凛驮。可以聲明為塊記載的數(shù)據(jù)類(lèi)型為整型条辟、字符型黔夭、浮點(diǎn)型或是其他數(shù)據(jù)類(lèi)型,作為變量的保存之用羽嫡。

Java 的數(shù)據(jù)類(lèi)型可分為原始數(shù)據(jù)類(lèi)型與引用數(shù)據(jù)類(lèi)型本姥。

原始數(shù)據(jù)類(lèi)型也稱(chēng)為基本數(shù)據(jù)類(lèi)型,它們包括了最基本的 boolean杭棵、 byte婚惫、 char、short、 int先舷、 long艰管、 float 與 double 等類(lèi)型圆裕。

另一種數(shù)據(jù)類(lèi)型為引用數(shù)據(jù)類(lèi)型娘赴,它是以一種特殊的方式指向變量的實(shí)體,這種機(jī)制類(lèi)似于 C / C++的指針舔糖。這類(lèi)的變量在聲明時(shí)是不會(huì)分配內(nèi)存的尔破,必須另外進(jìn)行開(kāi)辟內(nèi)存空間的操作街图,如字符串與數(shù)組均屬于這種數(shù)據(jù)類(lèi)型。

聲明一個(gè)變量時(shí)懒构,編譯程序會(huì)在內(nèi)存里開(kāi)辟一塊足以容納此變量的內(nèi)存空間給它餐济。不管變量的值如何改變,都永遠(yuǎn)使用相同的內(nèi)存空間胆剧。因此絮姆,善用變量將會(huì)是一種節(jié)省內(nèi)存的方式。

常量與變量
//聲明Demo2類(lèi)
public class Demo2
{
    public static void main(String args[])
    {
        int num;  //聲明一個(gè)整形變量num
        num = 3; //將整形變量賦值為3
        //在屏幕輸出變量,用“+”連接
        System.out.println("這是數(shù)字"+num);
        System.out.println("我有"+num+"本書(shū)秩霍!");
    }
}

在上面代碼中篙悯,num為整形變量將常量3賦值給它。在程序進(jìn)行的過(guò)程中铃绒,可以為變量重新賦值鸽照,也可以使用已經(jīng)聲明過(guò)的變量。

數(shù)據(jù)類(lèi)型

Java 的變量類(lèi)型

在 Java 中規(guī)定了八種基本數(shù)據(jù)類(lèi)型變量來(lái)存儲(chǔ)整數(shù)颠悬、浮點(diǎn)數(shù)矮燎、字符和布爾值。如下圖所示:

image.png

接口就是抽象類(lèi)(abstract )赔癌,接口本身 也是一種抽象類(lèi)诞外,實(shí)現(xiàn)接口的類(lèi) 叫做實(shí)現(xiàn)類(lèi)

java的基本數(shù)據(jù)類(lèi)型:
image.png

整數(shù)類(lèi)型

Java 中,整數(shù)數(shù)據(jù)類(lèi)型可以分為 long灾票、 int峡谊、 short 及 byte 四種:
long 為 64 位,也就是8 個(gè)字節(jié)(bytes)刊苍,可表示范圍為-9223372036854775808 到9223372036854775807既们;
int 為 32 位,也就是 4 個(gè)字節(jié)班缰,表示范圍為-2147483648 到 2147483647贤壁;
若是數(shù)據(jù)值的范圍在-32768 到 32767 之間時(shí),可以聲明為 short(短整數(shù))類(lèi)型埠忘;
若是數(shù)據(jù)值更小脾拆,在-128 到 127 之間時(shí)馒索,可以聲明為 byte 類(lèi)型以節(jié)省內(nèi)存空間。

例子:

short num名船;//聲明num為短整型

Java 即會(huì)在可使用的內(nèi)存空間中绰上,尋找一個(gè)占有 2 個(gè)字節(jié)的塊供sum 變量使用,同時(shí)這個(gè)變量的范圍只能在-32768 到 32767 之間渠驼。

常量的數(shù)據(jù)類(lèi)型

public class Test
{
    public static void main(String args[])
    {
        long num = 329852547554;
        System.out.println(num);
    }
}
執(zhí)行結(jié)果:

Test.java:5: error: integer number too large
long num = 329852547554;
^
1 error
Error: Could not find or load main class Test
Caused by: java.lang.ClassNotFoundException: Test
sandbox> exited with status 0

把整數(shù)常量看成是 int 類(lèi)型蜈块,但 329852547553 這個(gè)整數(shù)已超出了 int 類(lèi)型所能表示的范圍,因此雖然把 num 的類(lèi)型設(shè)為 long迷扇,但編譯時(shí)仍然會(huì)發(fā)生錯(cuò)誤百揭。

解決方法:只要在整數(shù)常量后面加上一個(gè)大寫(xiě)的“L”即可.

public class Test
{
    public static void main(String args[])
    {
        long num = 329852547554L;
        System.out.println(num);
    }
}
執(zhí)行結(jié)果:329852547554

數(shù)據(jù)類(lèi)型的最大值與最小值

Java 提供了 long、 int蜓席、 short 及 byte 四種整數(shù)類(lèi)型的最大值器一、最小值的代碼。最大值的代碼是 MAX_VALUE厨内,最小值是 MIN_VALUE祈秕。

如果要取用某個(gè)類(lèi)型的最大值或最小值,只要在這些代碼之前雏胃,加上它們所屬的類(lèi)的全名即可请毛。

如果程序代碼里需要用到長(zhǎng)整數(shù)的最大值,如圖 所示的語(yǔ)法表示:

image.png

如果要使用某個(gè)類(lèi)型的代碼瞭亮,則必須先指定該類(lèi)型所在的類(lèi)庫(kù)以及該類(lèi)型所屬的類(lèi)方仿,但因 java.lang 這個(gè)類(lèi)庫(kù)屬于常用類(lèi)庫(kù),所以默認(rèn)的 Java 程序會(huì)將它加載街州,因此在實(shí)際的應(yīng)用上設(shè)計(jì)者可以將它省略兼丰。

Java 所提供的整數(shù)的最大值與最小值的標(biāo)識(shí)符及常量值,如下圖所示:


image.png

溢出的發(fā)生

當(dāng)整數(shù)的數(shù)據(jù)大小超出了可以表示的范圍唆缴,而程序中又沒(méi)有做數(shù)值范圍的檢查時(shí),這個(gè)整型變量所輸出的值將發(fā)生紊亂黍翎,且不是預(yù)期的運(yùn)行結(jié)果面徽。

// 整數(shù)值如果超出了自己所可以表示范圍的最大值,會(huì)出現(xiàn)溢出
public class Test
{
    public static void main(String args[])
    {
        int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
        
        System.out.println("x = "+x);
        
        System.out.println("x+1 = "+(x+1));
        
        System.out.println("x+2 = "+(x+2));
    }
}

輸出結(jié)果:

x = 2147483647
x+1 = -2147483648
x+2 = -2147483647

當(dāng)最大值加上 1 時(shí)匣掸,結(jié)果反而變成表示范圍中最小的值趟紊;當(dāng)最大值加上 2 時(shí),結(jié)果變成表示范圍中次小的值碰酝,這就是數(shù)據(jù)類(lèi)型的溢出霎匈。

image.png

為了避免 int 類(lèi)型的溢出,可以在該表達(dá)式中的任一常量后加上大寫(xiě)的“L”送爸,或是在變量前面加上 long铛嘱,作為強(qiáng)制類(lèi)型的轉(zhuǎn)換暖释。

// 整數(shù)值如果超出了自己所可以表示范圍的最大值,會(huì)出現(xiàn)溢出
public class Test
{
    public static void main(String args[])
    {
        int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
        
        System.out.println("x = "+x);
        
        System.out.println("x + 1 = "+(x+1));
        
        System.out.println("x + 2 = "+(x+2L));
        
        System.out.println("x + 3 = "+((long)x+3));
    }
}

輸出結(jié)果:

x = 2147483647
x + 1 = -2147483648
x + 2 = 2147483649
x + 3 = 2147483650

程序說(shuō)明:

  • int x = java.lang.Integer.MAX_VALUE ; 聲明 int 類(lèi)型的整數(shù)變量 x墨吓,并賦值為整數(shù)最大值球匕,即 2147483647。
  • System.out.println("x = "+x); 輸出 x 的值帖烘,即: 2147483647亮曹。
  • System.out.println("x + 1 = "+(x+1)); 輸出 x+1 的值,此時(shí)溢出發(fā)生秘症,運(yùn)行結(jié)果變成-2147483648照卦。
  • System.out.println("x + 2 = "+(x+2L)); 輸出 x+2 的值,為了避免溢出發(fā)生乡摹,在表達(dá)式的常量部分 2 后加上 L役耕,執(zhí)行結(jié)果變成 2147483649。
  • System.out.println("x + 3 = "+((long)x+3)); 輸出 x+3 的值趟卸,為了避免溢出發(fā)生蹄葱,在表達(dá)式的整數(shù)部分 x 之前加上 long,執(zhí)行結(jié)果變成 2147483650锄列。

處理 int 類(lèi)型的溢出图云,可以利用強(qiáng)制類(lèi)型轉(zhuǎn)換方式。但是對(duì)于 long 類(lèi)型的溢出邻邮,就沒(méi)有處理辦法了竣况,此時(shí)就需要在程序中加上變量值的界限檢查,在運(yùn)行時(shí)才不會(huì)發(fā)生錯(cuò)誤筒严。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丹泉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸭蛙,更是在濱河造成了極大的恐慌摹恨,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娶视,死亡現(xiàn)場(chǎng)離奇詭異晒哄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肪获,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)寝凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人孝赫,你說(shuō)我怎么就攤上這事较木。” “怎么了青柄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵伐债,是天一觀的道長(zhǎng)预侯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)泳赋,這世上最難降的妖魔是什么雌桑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮祖今,結(jié)果婚禮上校坑,老公的妹妹穿的比我還像新娘。我一直安慰自己千诬,他們只是感情好耍目,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著徐绑,像睡著了一般邪驮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傲茄,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天毅访,我揣著相機(jī)與錄音,去河邊找鬼盘榨。 笑死喻粹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的草巡。 我是一名探鬼主播守呜,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼山憨!你這毒婦竟也來(lái)了查乒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤郁竟,失蹤者是張志新(化名)和其女友劉穎玛迄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棚亩,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡憔晒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔑舞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘹屯,死狀恐怖攻询,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情州弟,我是刑警寧澤钧栖,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布低零,位于F島的核電站,受9級(jí)特大地震影響拯杠,放射性物質(zhì)發(fā)生泄漏掏婶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一潭陪、第九天 我趴在偏房一處隱蔽的房頂上張望雄妥。 院中可真熱鬧,春花似錦依溯、人聲如沸老厌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枝秤。三九已至,卻和暖如春慷嗜,著一層夾襖步出監(jiān)牢的瞬間淀弹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工庆械, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薇溃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓干奢,卻偏偏與公主長(zhǎng)得像痊焊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忿峻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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