關於Java基本數據類型那些小細節(變量聲明、類型轉換、賦值等)

走過路過不要錯過,快來看一看,瞧一瞧了,買不了吃虧買不了上當,滿滿乾貨。hhhhh~

前提:瞭解基本類型 https://www.runoob.com/java/java-basic-datatypes.htmlhtml

1、變量聲明

  • 整數型默認int
  • 浮點型默認double

  一、聲明float類型

        float f11 = 1;      //賦值整數不會報錯,可加f可不加,會自動轉換成帶精度的數
//      float f12 = 1.0;    //賦值小數會報錯,要加上f後綴
        float f13 = 1.0f;

 

注意:當進行兩個數(整數/浮點數)進行比較,float類型的變量值帶f後綴時,有兩種狀況。(這個細節很容易忽視,就比如字符串比較時,常常會習慣性用==操做符)java

  (一)被比較的數爲帶精度的整數,例:1.0等。

    此時,被比較數不須要加f後綴,也能正確獲得比較結果。以下圖所示:spa

     

 

  (二)被比較的數爲純小數,例:1.8等。

    此時,被比較數須要加f後綴,才能正確獲得比較結果。以下圖所示:3d

    被比較數不加f後綴時:code

    

     被比較數加f後綴時:htm

    

 

  二、聲明double類型

//        聲明double類型時,可加d後綴可不加,會自動轉換爲帶精度的數
        double d11 = 1;
        double d12 = 1.0;
        double d13 = 1.0d;

 

注意:當進行兩個數(整數/浮點數)進行比較時,與純小數比較時,也有兩種狀況。(這個狀況主要仍是和精度有關,通常不容易犯錯,但也要注意)blog

  (一)被比較的數爲不帶後綴的純小數,例:1.8等

 

    由於浮點數默認double,不帶後綴的純小數都默認轉換爲double了,因此能獲得正確的比較結果。以下圖所示:字符串

    

 

  (二)被比較的數爲帶後綴f的純小數,例:1.8f等

    由於double比float精度高,因此不能獲得正確的比較結果。以下圖所示:get

     

   

   三、聲明long類型

//        聲明long類型
//        long l11 = 444444444444444; //報錯,要加上l後綴
        long l12 = 444444444444444l;

  四、局部變量聲明時沒有初始化就使用,會報錯(有點跳戲了,不過和變量聲明仍是有一絲絲關係啦~~~)

        int a;
        int b = 0;
        int c = 0, d = 0;
//        System.out.println(a);  //未初始化就使用會報錯(局部變量)
        System.out.println(b);  //初始化使用不會報錯(局部變量)

 

2、類型轉換與賦值

  • 向上自動轉換
  • 向下強制轉換

  備註: byte的類型的範圍是 -128 ~ 127 ( -2^(8-1)  ~  2^(8-1) -1 )io

  一、賦值問題

   舉例:byte賦值

        //直接賦值超出範圍報錯,以下
//        byte exampleB1 = 128;

  

  二、強制轉換數據溢出狀況

     舉例: int轉byte

        int exampleB2 = 129;   //129往前移兩位得-127
        System.out.println((byte)exampleB2);  //-127
        int exampleB3 = -129;   //-129往前移一位得127
        System.out.println((byte)exampleB3);  //127
        int exampleB4 = 256;   //256往前移(256-127=129)位,即0
        System.out.println((byte)exampleB4);  //0

   分析:

    想象這個範圍是在數軸上一直連續的區間

     

 

    以中間這個區間爲起始區間,當int = 129時,超出了區間(129-127 = 2)位,在對應的連續區間裏的位置是第二位,第一位是-128,第二位是-127,因此此時強制轉換打印的值是-127,而不是129

    

 

    以中間這個區間爲起始區間,當int = -129時,超出了區間(-128 - (-129) = 1)位,在對應的連續區間裏的位置是第一位,數一位,第一位是127,因此此時強制轉換打印的值是127,而不是129

    

 

 

記得點贊,麼麼噠~~~(づ ̄ 3 ̄)づ,愛您!

相關文章
相關標籤/搜索