導讀
變量,其實說白了就是一個數據存儲容器而已。這樣理解是沒有任何問題的,事實上也的確如此,任何一門編程語言幾乎都離不開數據處理,這些數據其實就被保存在一個個的變量中。通過變量的名稱,來找到數據存儲區域,從而拿到當中的數據。
標識符,在Java中能夠被程序員自定義的元素都被稱爲標識符。而標識符的核心規範其實不用多記,記住三點就行了。第一,不能是計算機非法字符。第二,不能是Java中的關鍵字或者保留字。第三,標識符不能是數字開頭和非法字符。
Java中有8種基本數據類型,這樣做的目的是解決基本運算的時候需要用到的是原生數據而不是對象。有一個好處的,JVM處理原生數據的時候效率是一定比對象消耗要少得多的。
變量的定義
格式如下:
[訪問修飾符 ] <數據類型> <變量名> = [<變量值>];
①、訪問修飾符,其實就是常用:public / private / proteced
|- public - 之前已經說過了,權限是最大的,覆蓋整個Java程序。
|- private - 私有的,被它修飾的元素,只能在當前的Java類中進行訪問,外部無法得到訪問權限。
|- protected - 保護的。(基於繼承關係之上,本類、同一個包、子類均可以訪問!)
②、變量名,就是給變量值的一個稱呼。調用這個稱呼就能夠拿到它的數據了,就這樣而已。
③、基本數據類型如下:
byte - 字節
short - 短整型
int - 整型
long - 長整型
float - 單精度
double - 雙精度
char - 字符
boolean - 布爾
在上面這些數據類型中,我只提及四個。
第一個,int,這個是整型,其實就是整數而已。在Java開發中用得最多的就是int類型。使用整數的時候,默認表示用這個。
第二個,double,這個是浮點型,就是小數,數學意義上的實數。使用整數的時候,默認可以用這個表示。
第三個,char,這個是字符,使用Unicode字符編碼底層維護,可以保存單個漢字和字母。
第四,boolean,布爾類型,其實就是隻有兩個值,要麼是true要麼是false。
就這麼完事兒了? —— 哪能啊,當然是選擇原諒其他沒說的啊。
來,分開來詳細講解一下這四種數據類型及其本質吧:
int,是4個字節,每個字節是8位,也就是32位的數據了。在計算機內存小格子中用了32個來保存這個數據。就當每一個小格子就是一個數據容器。而double是64位的,那麼綜合前面講的int,可以推斷出它的內存空間是絕對比int的存儲範圍要大得多啊。char說白了如果是字母的話,那就要計算它的Ascii碼,同樣來說也就是另一種形式的int值了。對不對?(細心一點可以發現小a和大A在ASCII碼錶中的數值是不一樣的!)再來,boolean這個比較特殊,它是不確定的。很多書中說它多數的情況下取1個字節,其實不然,不同的平臺對boolean的數據的取值的不一樣的。所以,待定,但不會影響整體開發的數據校驗和運算。
說了上面這些看似廢話的東西,目的在於什麼呢?—— 那肯定是有目的纔講的,大家的時間都很寶貴的。接下來就是要承上啓下的說一下數據類型轉換的問題了,在數據存儲範圍的知識點上我沒有做大篇幅的講述,是因爲我們只要知道小範圍和大範圍數據進行相互之間的賦值,其實這個賦值的過程就是我們要學習的:數據類型轉換了。
比如——
自動類型轉換:小範圍的數據類型,直接賦值給大存儲範圍的數據類型。
byte b = 127; // 我定義了一個byte類型的變量b,並且賦值爲127.
int i = b ; // 然後,我把b賦值給i這個變量,可以?當然,因爲int類型表示範圍比byte大得多了。
// 通過資料我們可以知道byte的存儲範圍是:-128~0~127之間的256個數。
// 而通過資料我們還可以知道int類型的數據居然可以保存到21億之多,不說下去,看官們都曉得啦!
強制類型轉換:與上面的剛好相反,由大範圍數據向小範圍賦值。
先不說其他的了,我說了,這個轉換其實本質就是—— 賦值!!!!!!!(記住了啊)
double d = 12.3;
float f = (floaf)d ; // 這裏是必須要強制轉換的,因爲float的範圍,沒有double的大。
看不懂代碼不要緊,寧叔也有對策,請看——
自動類型轉換,把一杯盛滿的白開水倒入一個空水缸當中,毫無壓力。
強制類型轉換,你試試把一缸滿水,倒入一個空水杯中,我去,溢出來的很多吧道理就是這樣子的。(涉及一個專有名詞:內存溢出)
好,簡單大方地概述了,懂了嗎?綜合這些概述,我再送給您一句話:數據轉換或者賦值,首要條件在於數據類型是否匹配,如果匹配然後再查詢這個數據存儲是否大於有效範圍之內,如果都ok,嗯,保存成功!反之——失敗(溢出)!
那麼,很多人會問,寧叔,你怎麼知道會溢出。
嘿嘿,首先是看數據類型的字節嘛,對不對。然後呢就是去找到源碼轉換的思想,原來是通過位運算來操作的,那麼這樣就好辦了,就可以知道當中的運算了。無非是按照計算機中的原碼、反碼進行計算罷了,然後就可以得出結論了。