天天看點

Java學習曆程(2)——java基礎資料類型

java基礎資料類型

  • 基礎資料類型

    各種基礎資料類型所占位元組數的大小(機關Byte)
       整數型資料
       	byte  1   取值範圍 -128~127
       	short 2   取值範圍 -32768 ~ 32767
      	int   4   取值範圍 -2147483648 ~ 2147483647
    	long  8   
       浮點數型資料 float 4 double 8
       字元型資料 char 2
       布爾型資料 boolean 1 (Ture & false)并不是0 & 1
               
    我們可以看到在Java中也存在很多c語言中的基礎資料類型,不同的是C中char型資料隻占有一個位元組而Java中是兩個位元組,同時還有byte short boolean型資料。
  • 原碼 補碼 反碼(筆記+了解)

    在計算機記憶體存儲的二進制都是以補碼的形式進行存儲。
    原碼就是一個整數的二進制的表示。第一位表示符号位,0表示正,1表示負。
    對正數來說,他的原碼、反碼、補碼就是他本身。
    如:1的原碼:00000001 其他也為其本身。
    對于一個負數來說,情況有所不同。
     如:(PTA上一程式填空題)
     	整形資料用兩個位元組來表示 用二進制表示-127
     	  -127的原碼:10000000 01111111
        	反碼:符号位不變,其他位取反也就是說,符号位不變
          -127的反碼:11111111 10000000
          補碼:反碼+1
          -127的補碼:11111111 10000001
               
  • 資料之間的類型轉換

    記住一個原則:高位轉換為低位時需要進行強制類型轉換,低位轉高位且在低位的取值範圍之内的則不需要,他會實作自動類型轉換。

    同時Java中定義整數型資料的時候預設數字為十進制的數為int型資料

    很多編譯報錯就是因為類型轉換的問題,

    public class test{
    	public static void main(String[] args){
       byte s  = 128;
            /*
            D:\A>javac test.java
            test.java:3: 錯誤: 不相容的類型: 從int轉換到byte可能會有損失
               byte s  = 128;
                         ^
            1 個錯誤
            這裡byte型的資料取值範圍隻有127,128超出了範圍.
            要使得編譯通過則需要強制類型轉換(可能損失)
            */
       System.out.println(s);
       }
    }
    同時
               

    那麼為什麼有損失?又是怎麼損失的?

    下接老師的圖= =

    Java學習曆程(2)——java基礎資料類型
    public class test{
    	public static void main(String[] args){
       byte s  = (byte)200;
       System.out.println(s);
            //結果為-56,上圖已經計算的有
       }
    }
    public class test{
    	public static void main(String[] args){
       byte s  = (byte)128;
       System.out.println(s);
            //結果為-128
       }
    }
    為什麼?
        個人了解:這裡強制轉換為byte型資料則隻看一個位元組(byte)8位上的補碼。
        		方法都是這樣,以此類推可以知道強制轉換是如何進行的。
        如128轉換後取最後八位為  10000000 (補碼)
        					 11111111 (反碼)
        					 10000000 (原碼)即為-128
        					//可能反碼錯了感覺-128有點不對勁(此處待修改)
               
  • 注意的點

    • long與int
      我們知道了long a = 123; 中123預設為int型變量,那麼由低位轉為高位會自動轉換這沒問題,但是
      long型資料有8Byte,當123所表示的數需要超過其取值範圍 -2147483648 ~ 2147483647時會出現編譯錯誤。
          public class test{
      	public static void main(String[] args){
         long s  = 2147483648;
              /*
                  D:\A>javac test.java
                  test.java:3: 錯誤: 過大的整數: 2147483648
                     long s  = 2147483648;
                               ^
                  1 個錯誤
                  2147483648超出了int的範圍,是以會報錯。
                  那麼如何解決問題?隻需要在2147483648後添加L即可。
                  此時2147483648L表示的為long型資料占8個位元組(小寫l不好辨認,是以一般建議寫大寫L)
              */
         System.out.println(s);
         }
      }
      ——結論:定義long型資料時,後面的數字要加L。
                 
    • double與float
      ——雖然float型隻占四個位元組,但是其所表示的範圍比long型大(記住)
      ——在Java中小數通常預設為double型資料(8byte),這與預設int一樣.
          public class test{
      	public static void main(String[] args){
         float s  = 1.0;
         /*
              D:\A>javac test.java
              test.java:3: 錯誤: 不相容的類型: 從double轉換到float可能會有損失
                 float s  = 1.0;
                            ^
              1 個錯誤
             	在這裡也是高轉低,需要強制類型轉換才能使得編譯通過。
             	與上面的long和int一樣,我們采取相似的方法解決這個問題。
             	在1.0後加上F即可表示1.0位float型資料。
         */
         System.out.println(s);
         }
      }
      ——結論:定義float型資料時,後面的數字要加F。
                 
    • boolean

    其值隻能為true 或 false(需注意:true與false不等價于1與0)

    同時boolean常常用在判斷條件中。

    public class test{
    	public static void main(String[] args){
       boolean s  = true;
           while(s){
               System.out.println(s);
           }
            //當我們需要結束循環時最好采用改變s的bool值的方式,這樣易于檢視。(代碼量大的時候吧   maybe= =)
       }
    }
    且其不可轉換為int型