1. 程式人生 > >3、java中的資料型別和運算子

3、java中的資料型別和運算子

 

資料型別

資料型別是對資料儲存在記憶體中位置的一種抽象表示,java的資料型別總體上分為兩大類:基本資料型別和引用資料型別。

1、基本資料型別

       基本資料型別是語言本身定義的,資料結構上有說基本資料型別表示的是真實的數字和字元,在java中,基本資料型別的資料都是儲存在棧記憶體中,基本資料型別包含四類八種,介紹如下。

       第一類:整型,包含四種資料型別,位元組型(byte)、短整型(short)、整型(int)和長整型(long)。byte型別的資料在記憶體中佔1個位元組(8位),取值範圍換成十進位制是-2^7到2^7-1,預設值為0;short型別的資料在記憶體中佔2個位元組(16位),取值範圍是-2^15到-2^15,預設值是0;int型別的資料在記憶體中佔4個位元組(32位),取值範圍是-2^31到2^31,預設值是0;long型別的資料在記憶體中佔8個位元組(64位),取值範圍是-2^63~2^63-1,預設值是0L。

       第二類:浮點型,包含兩種資料型別,單精度浮點數(float)和雙精度浮點數(double),float型別的資料在記憶體中佔4個位元組(32位),取值範圍是1.4E-45~3.4028235E38 (程式列印的),預設值是0.0;double型別的資料在記憶體中佔8個位元組(64位),取值範圍是4.9E-324~1.7976931348623157E308,預設值是0.0。兩者區別在於double表示的小數更加精確,一般表示浮點數時都是用double,如果宣告float型則數值需加F,例如:float f = 20L;

       第三類:字元型,用於儲存字元型別資料,佔2個位元組(16位),取值範圍時0到65535,預設值為空。說起字元就要說一下Unicode字符集,0到65535每一個數再Unicode字符集中都對應一個特定的字元,宣告的字元型資料需要用單引號引起來,例如:char ch = ‘A’;還有一種就是轉義類字元,以”\”開頭。

       第四類:布林型,用於儲存布林型別資料,佔用1個位元組(8位),只有兩個數值true和false,預設值是false。

       補充:資料在記憶體中是以二進位制形式表示的,以byte型別為例,在記憶體中佔8位,由於整型資料有正負之分,所以八位中的最高為用來表示符號位,0為正,1為負。正數在記憶體中以被儲存資料的二進位制原碼進行儲存,而負數是以其對應正數補碼形式存在,也就是正數的原碼取反後加1。也正是因為儲存的資料因為型別不同佔用的儲存單元也不同,所以就會存在一個問題,當使用佔儲存單元少的資料型別去強制儲存佔用儲存單元多的資料型別的資料時就會發生精度缺失的錯誤,這就是強制型別轉換會使得資料丟失精度的本質。所以在使用時應注意避免不要造成精度確實。

2、引用資料型別

       引用資料型別可以是String 、數值 、java中的或使用者自定義的各種類,引用資料型別的資料在記憶體中的儲存和基本資料型別不同,在棧中儲存的僅是變數和儲存具體資料的地址,而具體的資料是儲存在堆上的,這也是之所以叫做引用型別的原因,棧中儲存的僅是引用的儲存在堆中的具體資料一個地址而已。(String有點特別)

       對於引用資料型別沒什麼介紹的,這東西需要長期積累。

       這裡著重說一下,java中引用資料型別是遵循引用傳遞的(string型別有點特別),這裡的引用傳遞指的是可以將引用型別資料的值進行修改,而不是真的去修改地址,java是無法直接去修改地址的。

運算子

1、算術運算子

        顧名思義,就是加(+)、減(-)、乘(*)、除(/)、取餘(%)等,其中還有兩個特殊的自加和自減操作,簡單說一下,自加運算子,例如:i++,就表示i本身加上1,然後將值重新賦值給i,就相當於i = i + 1; ,自減與自加相同只是減1而已。

2、賦值運算子

        就是將值賦給宣告的變數,例如:i = 1; 說白了就是將右邊的值賦給左邊

3、關係運算符

        就是用來比較兩個資料之間關係的符號,對於基本資料型別而言,比較的就是大小,而對於引用的資料型別比較的就是兩個資料是否儲存在同一地址下(只有”!=”和”==”才使用於引用個型別)。符號標識有:> 、<、>=、<=、!=、== 。

        這裡說一下”=”和”==”,前一個是賦值運算子,而後一個是比較運算子,例如比較1和2是否相等,使用”==”。

4、邏輯運算子

      Java中的邏輯運算子包括與(&&)、或(||)、非(!)、異或(^),簡單介紹以下

      與:A&&B,就是當A並且B 同時滿足,才表示條件成立

      或:A||B,表示當A或者B有一個滿足時,條件就成立

      非:!A,表示當不滿足條件A時,整體的條件就成立

      異或:A^B,當A或B只要有一個為true,整個條件就成立

5、位運算子

       用來操作二進位制的運算子,包括:按位與(&)、按位或(|)、右移(>>)、左移(<<)、無符號右移(>>),還有其他的位運算,想了解的非常清楚話建議學習以下編譯原理,這裡只是簡單的介紹以下常用的用法。

       先說一下按位與和邏輯與的區別,兩者都是表示與,只有兩個條件都成立才可以,但是邏輯與又被稱為短路與,意思就是當A&&B中如果A不滿足條件則不會再去判斷B是否滿足條件,而按位與則會去繼續判斷。按位或同於按位與

       說一下左移,這裡不進行具體的位運算演示,只說一下值的變化, a<<b ,a左移b位,相當於a = a * 2 ^ b,就是將a乘以2的b次方的值賦給a。右移相當於除以2的b次方。不過這些操作都需要在合理的數值範圍內進行,不然會產生錯誤.

6、三目運算子

       這個也是開發中經常使用的,具體格式如下:

       String a = 條件是否成立 ?  “1” : “2”;

       如上給a賦值,當條件成立時,則將1賦給a,否則將2賦給a,也就是條件如果成立則取分號前邊的值,否則分號後邊.