Java變量,常量,數據類型轉換。

常量是指在程序運行過程中其值不能改變的量。


常量的類型

Java中常量的分類:

    整數常量: 所有整數

    小數常量: 所有小數

    布爾常量: 只有true和false

    字符常量:使用’’引起來的單個字符

    字符串常量(String):使用“”引起來的字符序列,“”  、“a” 、”” 

    null常量: 只有一個值null


char 類型

char類型表示的是單個字符類型,任何數據使用單引號括起來的都是表示字符。字符只能有一個字符,比如:普通的人穿上軍裝就是軍人。


轉義字符的概述

轉義字符

名稱

Unicode

\b

Backspace (退格鍵)

\u0008

\t

Tab   (Tab鍵盤)

\u0009

\n

Linefeed (換行)

\u000A

\r

Carriage Return(回車)

\u000D

\\

Backslash  (反斜槓)

\u005C

\'

Single Quote (單引號)

\u0027

\"

Double Quote (雙引號)

\u0022

\r 表示接受鍵盤輸入,相當於按下回車。

\n 表示換行。

\t  製表符,相當於Table鍵

\b 退格鍵,相當於Back Space

\’  單引號

\’’ 雙引號

\\ 表示一個斜跨


特殊字符使用”\”把其轉化成字符的本身輸出,那麼使用”\”的字符稱作爲轉義字符。

比如使用輸出語句,打印出帶引號的信息例如輸出。

System.out.println("teachersaid"java is fun"");編譯是無法正常通過的。語法有錯誤,編譯器讀到第二個引號就認爲是字符串的結束,剩餘的不知道怎麼處理。如何解決這個問題:java中使用轉義字符來表示特殊的字符。一個轉義字符以反斜槓(\)開始。

解決方案:System.out.println("teacher said\"java is fun\"");

注意:換行符就是另起一行,回車符就是回到一行的開頭,所以我們平時編寫文件的回車符應該確切來說叫做回車換行符


boolean由數學家Geogore Boole 發明

boolean 類型用來存儲布爾值,在java中布爾值只有2個,true和false。

boolean flag=true;

flag=false;


變量

用於存儲可變數據的容器。

變量存在的意義

計算機主要用於處理生活中的數據,由於生活中存在大量的可變數據,那麼計算機就必須具備存儲可變數據的能力。

比如:

時間每一秒都在發生變化,根據不同的時間要有不同的處理方式。

氣象站會根據溫度發佈天氣預報信號。


變量的特點

正常情況下牛奶盒裝的都是牛奶,而且會根據牛奶的多少去決定要多大的容量的牛奶盒,A和B兩位同學同時把牛奶盒放進籃子裏面,但是需要區分兩個牛奶盒是誰的,都需要在牛奶盒上做一個標誌。

1.   必須要有大小

2.   存儲一定格式的可變數據

3.   必須要有名字

根據上述變量的特點,所以我們聲明一個變量的時候需要確定變量的大小,類型、名字三個特點:

錯誤: 1024byte   temp = 1000000;

錯誤原因,java有自己的變量類型。 


變量的數據類型

1. 整型

  byte   代表一個字節的大小   8bit 2(8)   -128~127    256

 short  代表兩個字節的大小  16bit 2(16)  -2(15)~2(15)-1

  int    代表四個字節的大小  32bit 2(32)  -2(31)~2(31)-1

  long   代表八個字節的大小  64bit 2(64)  -2(63)~2(63)-1

  如果一個數值沒有采取特殊的處理,那麼該整數默認的類型是int

  可以使用數值後面添加L或小寫L改變默認的整數類型。

2. 浮點型

   float  代表四個字節的大小  32bit

   double 代表八個字節的大小  64bit

java程序中所有的小數默認的類型是double類型,所以需要使用特殊的符號改變默認的小數類型。

3. 字符型

   char   代表兩個字節的大小  16bit 2(16)

    原理:將字符映射爲碼錶中對應的十進制數據加以存儲。

4. 布爾型

     boolean  佔一個字節。只有true與false兩個值。



變量的聲明

格式:  數據類型  變量名字1  , 變量名字2  ,……變量名字n  ,;

例:

              int i 聲明瞭一個×××的變量。

              double d 聲明瞭一個double數據類型的變量

              float  f 聲明瞭一個float數據類型的變量。

備註:變量名的首字母都一般都是以小寫字母開始。


變量的初始化方式

初始化方式1: 數據類型 變量名字 = 數值。

初始化方式2: 數據類型 變量名字 , 變量名字 = 數值。

例:

         方式1: double d = 3.14;

         方式2: double d ; d = 3.14 ;


Java中這8中基本數據類型都是小寫的。



 Java中可以進行不同數據類型的加減乘除運算嗎?答案是可以的。在算術運算符中已經體驗過如果兩個整數(int)相除會去掉小數部分。如果需要保留小數部分,可以讓除數或者被除數變爲double類型的(5變爲5.0)。其實Java是自動的將int的那個數變爲了double類型了也就是Java自動的將整數變爲了浮點數。例如5/2.0 其實是5.0/2.0

1、自動類型轉換(也叫隱式類型轉換)

可以將一個數賦值給更大數值範圍的變量,例如可以經byte 變量賦值給short變量可以將short變量賦值給int變量可以將int變量賦值給long變量。

Java內部其實做了工作就是自動將數值進行了類型提升,就叫做自動類型轉換(也叫隱式類型轉換)

byte b = 1;  //00000001

       short s = b;  //00000000 00000001

       int i = s;

       long lon = i;

       double d  = lon; //1.0


自動類型轉換(也叫隱式類型轉換)

要實現自動類型的轉換,需要滿足兩個條件,第一兩種類型彼此兼容,第二目標類型取

值範圍必須大於源類型。所有的數字類型,包括×××和浮點型彼此都可以進行轉換。

例:

byte b=100;

       int x=b;

       System.out.println(x);//程序把b結果自動轉換爲int類型。


2、強制類型轉換(也叫顯式類型轉換)

不可以將一個數值賦給範圍更小數值範圍的變量,除非進行類型轉換。

       byte b = 100;

       b = b + 2;

       System.out.println(b);

上述例子發生了什麼,發生了類型轉換。

b+2 遇到了加法運算,2默認是int類型,byte類型b變量存儲的值自動類型提升爲

了int類型。執行完加法運算後的結果就是int類型,想要將int的類型值放入到byte類型變量b中,無法放入,編譯報錯。

 

       byte b=1;

       b=(byte)(b+2);

 

當兩種類型彼此不兼容,或者目標類型取值範圍小於源類型(目標是byte源是int)

無法自動轉換,此時就需要進行強制類型轉換。

 

強制類型轉換需要注意:

    損失精度!!!

       int a=128;

       byte b=(byte)a;

       System.out.println(b);//-128

       /*

        * 此時的強轉已經造成了數值的不準確

       */


再次分析此行代碼

        byte b = 100;

        b = b + 2;

       System.out.println(b);

  編譯:提示如下錯誤。

3、類型轉換的原理

可以把byte 理解爲1兩的碗,short 2兩的碗,int 4兩的碗,long 8兩的碗。1兩碗的滿碗酒可以倒入 2兩 4兩 8兩的碗中。但是 4兩碗的酒倒入1兩碗的酒就有一些問題。


4、什麼時候要用強制類型轉換

   比如小數部分只想保留整數部分.

   一定要清楚要轉換的數據在轉換後數據的範圍內否則會損失精度.

publicstaticvoid main(String[] args) {

       byte b = 100;

       b = (byte) (b + 2);

       System.out.println(b); // 102

        //捨棄小數部分

        double d=5.5;

       int num=(int)d;

}

 

5、表達式的數據類型自動提升

算術表達式,邏輯表達式                                   

所有的byte型、short型和char的值將被提升到int型。

如果一個操作數是long型,計算結果就是long型;

如果一個操作數是float型,計算結果就是float型;

如果一個操作數是double型,計算結果就是double型。

分析 System.out.println(‘a’+1)結果?

自動類型提升

  

byte b = 3;

       int x = 4;

       x = x + b;// b會自動提升爲int類型參與運算。

       System.out.println(x);// 7

 

 

強制類型轉換

 

byte b = 2;

       /*

        * 強制類型轉換,強制將b+2強制轉換爲byte類型,再賦值給b

        */

       b = (byte) (b + 2);

       System.out.println(b);// 4

思考1

byte  b=126;

問:既然數據默認的有數據類型,那麼126 默認是int類型的,爲什麼存儲到byte類型時不會報錯呢。

126 是常量java在編譯時期會檢查該常量(每個常量)是否超出byte類型的範圍。如果沒有可以賦值。

思考2:byte b=128;能否正常的編譯和運行。

該語句會出現編譯錯誤,128超出了byte變量的存儲範圍,所以出現編譯錯誤。

 

思考2

byte b1=3,b2=4,b;

b=b1+b2;

b=3+4;

哪一句編譯失敗?爲什麼?

b =3+4, 3和4都是常量,所以java在編譯時期會檢查該常量(每個常量)是否超出byte類型的範圍。如果沒有可以賦值。例如b=128+1 就無法編譯通過。b=127+1;也是無法通過。

b =b1+b2 不可以,因爲b1 和b2 是變量,表達式求值時,變量值會自動提升爲int型,表達式結果也就成了int型,這是要賦值給byte型的b,必須進行強制類型轉換了。

 

6、System.out.println(‘a’+1)結果

美國人爲了讓計算機識別他們生活中的文字,讓二進制表示生活中的文字.所以一個字母代表了一個二進制.,二進制也有十進制的表現形式.,把生活中的字母都用數字來標識,例如97 代表a ,98 代表 b。打印’a’就把a作爲輸出顯示,沒有疑問。但是 ‘a’+1 有加號涉及到了運算。根據java自動類型提升規則,同樣道理 char 提升爲int 。就把’a’代表的數字體現了出來。a 表示的是97 97+1就是98; 那麼想要查看98 表示的char 是什麼怎麼實現呢 ?就要用到剛纔介紹的強制類型轉換了 System.out.println(char(‘a’+1));就取到了98 在ASCII碼錶中表示的字符。大寫A 和小寫a 在 ASCII有不同的表現。還有一個概念字符’1’ 在ASCII中 不是數字 1,可以運行代碼查看,到此就可以明白了char 類型,char類型也是可以參與運算的,爲什麼可以參與運算呢。因爲字符在ASCII表中都有對應的數字體現。所有的計算機兼容ASCII。

        System.out.println('a'+1); //98

       System.out.println((char)('a'+1));  //b

補充問題:

       int i='a'+'b';

       System.out.println(i);//結果?     

       System.out.println("hello"+'j'); //結果?

總結:

所有數值運算符都可以用在char型數據上,如果另一個操作數是

一個數字或者字符,那麼char會自動提升爲int型,如果另一個

操作數是字符串,那麼字符就會和字符串相連。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章