天天看點

Java資料類型轉換、運算符、方法

Java資料類型轉換、運算符、方法

      • 一、資料類型轉換
        • 1.1 自動轉換
        • 1.2 強制轉換
        • 1.3 ASCII編碼表
      • 二、運算符
        • 2.1 算數運算符
        • 2.2 指派運算符
        • 2.3 比較運算符
        • 2.4 邏輯運算符
        • 2.5 三元運算符
      • 三、方法入門
        • 3.1 概述
        • 3.2 方法的定義
        • 3.3 方法的調用
        • 3.4 注意事項

一、資料類型轉換

Java

程式中要求參與的計算的資料,必須要保證資料類型的一緻性,如果資料類型不一緻将發生類型的轉換。

1.1 自動轉換

一個

int

類型變量和一個

byte

類型變量進行加法運算, 結果會是什麼資料類型?

int i = 1; 
byte b = 2;
           

運算結果,變量的類型将是

int

類型,這就是出現了資料類型的自動類型轉換現象。

  • 自動轉換:将 取值範圍小的類型自動提升為取值範圍大的類型 。
    public static void main(String[] args) {
        int i = 1;
        byte b = 2;
        //byte x = b + i; // 報錯
        //int類型和byte類型運算,結果是int類型
        int j = b + i;
        System.out.println(j);
    }
    //結果
    3
               

同樣道理,當一個

int

類型變量和一個

double

變量運算時,

int

類型将會自動提升為

double

類型進行運算。

public static void main(String[] args) {
    int i = 1;
    double d = 2.5;
    //int類型和double類型運算,結果是double類型
    //int類型會提升為double類型
    double e = d + i;
    System.out.println(e);
}
//結果
3.5
           

轉換規則:

範圍小的類型向範圍大的類型提升,

byte

short

char

運算時直接提升為

int

Java資料類型轉換、運算符、方法

1.2 強制轉換

将 1.5 指派到

int

類型變量會發生什麼?産生編譯失敗,肯定無法指派。

double

類型記憶體8個位元組,

int

類型記憶體4個位元組。 1.5 是

double

類型,取值範圍大于

int

。想要指派成功,隻有通過強制類型轉換,将

double

類型強制轉換成

int

類型才能指派。

  • 強制類型轉換:将取值範圍大的類型 強制轉換成取值範圍小的類型 。 比較而言,自動轉換是

    Java

    自動執行的,而強制轉換需要我們自己手動執行。

轉換格式:

資料類型 變量名 = (資料類型)被轉資料值;
           

将 1.5 指派到

int

類型,代碼修改為:

// double類型資料強制轉成int類型,直接去掉小數點。 
int i = (int)1.5;
           

同樣道理,當一個

short

類型與 1 相加,我們知道會類型提升,但是還想給結果指派給

short

類型變量,就需要強制轉換。

public static void main(String[] args) {
    //short類型變量,記憶體中2個位元組 
    short s = 1; 
    /*出現編譯失敗 
      s和1做運算的時候,1是int類型,s會被提升為int類型 
      s+1後的結果是int類型,将結果在指派會short類型時發生錯誤 
      short記憶體2個位元組,int類型4個位元組 
      必須将int強制轉成short才能完成指派 
    */
    //s = s + 1;//編譯失敗 
    //編譯成功 
    s = (short) (s + 1);
}
           

強烈注意:

  • 浮點轉成整數,直接取消小數點,可能造成資料損失精度。
  • int

    強制轉成

    short

    砍掉2個位元組,可能造成資料丢失。
    // 定義s為short範圍内最大值 
    short s = 32767; 
    // 運算後,強制轉換,砍掉2個位元組後會出現不确定的結果 
    s = (short)(s + 10);
               

1.3 ASCII編碼表

public static void main(String[] args) { 
	//字元類型變量 
	char c = 'a'; 
	int i = 1; 
	//字元類型和int類型計算 
	System.out.println(c+i); 
}
//輸出結果
98
           

在計算機的内部都是二進制的0、1資料,如何讓計算機可以直接識别人類文字的問題呢?就産生出了編碼表的概念。

  • 編碼表 :就是将人類的文字和一個十進制數進行對應起來組成一張表格。
  • 将所有的英文字母,數字,符号都和十進制進行了對應,是以産生了世界上第一張編碼表

    ASCII

在char類型和int類型計算的過程中,char類型的字元先查詢編碼表,得到97,再和1求和,結果為98。char類型提升 為了int類型。char類型記憶體2個位元組,int類型記憶體4個位元組。

二、運算符

2.1 算數運算符

算數運算符 描述

+

加法運算,字元串連接配接運算

-

減法運算

*

乘法運算

/

除法運算

%

取模運算,兩個數字相除取餘數

++

--

自增自減運算

Java

中,整數使用以上運算符,無論怎麼計算,也不會得到小數。

public static void main(String[] args) { 
	int i = 1234; 
	System.out.println(i/1000*1000); 
}
//計算結果
1000
           
  • ++

    運算,變量自己增長1。反之,

    --

    運算,變量自己減少1,用法與

    ++

    一緻。
    • 獨立運算:
      • 變量在獨立運算時, 前

        ++

        和 後

        ++

        沒有差別 。
      • 變量前

        ++

        :例如

        ++i

      • 變量 後

        ++

        :例如

        i++

    • 混合運算:
      • 和其他變量放在一起, 前

        ++

        和後

        ++

        就産生了不同。
      • 變量前

        ++

        :變量

        a

        自己加1,将加1後的結果指派給

        b

        ,也就是說

        a

        先計算。

        a

        b

        的結果都是2。
        public static void main(String[] args) { 
        	int a = 1; 
        	int b = a++; 
        	System.out.println(a);//計算結果是2 
        	System.out.println(b);//計算結果是1 
        }
                   
  • +

    符号在字元串中的操作:
    • +

      符号在遇到字元串的時候,表示連接配接、拼接的含義。
    • “a”+"b"的結果是“ab”,連接配接含義。
      public static void main(String[] args){ 
      	System.out.println("5+5="+5+5);//輸出5+5=55 
      }
                 

拓展:

  • +=

    符号的擴充

    下面的程式有問題嗎?

    public static void main(String[] args){ 
    	short s = 1; 
    	s+=1; 
    	System.out.println(s); 
    }
               
    分析:

    s += 1

    邏輯上看作是

    s = s + 1

    計算結果被提升為

    int

    類型,再向short類型指派時發生錯誤,因為不能将取值範圍 大的類型指派到取值範圍小的類型。但是,

    s=s+1

    進行兩次運算 ,

    +=

    是一個運算符,隻運算一次,并帶有強制轉換的特點, 也就是說

    s += 1

    就是

    s = (short)(s + 1)

    ,是以程式沒有問題編譯通過,運作結果是2.
  • 常量和變量的運算

    下面的程式有問題嗎?

    public static void main(String[] args){ 
    	byte b1=1; 
    	byte b2=2; 
    	byte b3=1 + 2; 
    	byte b4=b1 + b2; 
    	System.out.println(b3); 
    	System.out.println(b4); 
    }
               
    分析:

    b3 = 1 + 2

    , 1 和 2 是常量,為固定不變的資料,在編譯的時候(編譯器

    javac

    ),已經确定了

    1+2

    的結果并沒有超過

    byte

    類型的取值範圍,可以指派給變量

    b3

    ,是以

    b3=1 + 2

    是正确的。 反之,

    b4 = b2 + b3

    b2

    b3

    是變量,變量的值是可能變化的,在編譯的時候,編譯器javac不确定

    b2+b3

    的結果是什 麼,是以會将結果以

    int

    類型進行處理,是以

    int

    類型不能指派給

    byte

    類型,是以編譯失敗。

2.2 指派運算符

指派運算符 描述

=

等于号

+=

加等于

-=

減等于

*=

乘等于

/=

除等于

%=

取模等
  • 指派運算符,就是将符号右邊的值,賦給左邊的變量。
public static void main(String[] args){ 
	int i = 5; 
	i+=5;//計算方式 i=i+5 變量i先加5,再指派變量i 
	System.out.println(i); //輸出結果是10 
}
           

2.3 比較運算符

比較運算符 描述

==

比較符号兩邊資料是否相等,相等結果是

true

<

比較符号左邊的資料是否小于右邊的資料,如果小于結果是

true

>

比較符号左邊的資料是否大于右邊的資料,如果大于結果是

true

<=

比較符号左邊的資料是否小于或者等于右邊的資料,如果小于結果是

true

>=

比較符号左邊的資料是否大于或者等于右邊的資料,如果小于結果是

true

!=

不等于符号 ,如果符号兩邊的資料不相等,結果是

true

  • 比較運算符,是兩個資料之間進行比較的運算,運算結果都是布爾值

    true

    或者

    false

    public static void main(String[] args) { 
    	System.out.println(1==1);//true 
    	System.out.println(1<2);//true 
    	System.out.println(3>4);//false 
    	System.out.println(3<=4);//true 
    	System.out.println(3>=4);//false 
    	System.out.println(3!=4);//true 
    }
               

2.4 邏輯運算符

比較運算符 描述

&&

短路與
1. 兩邊都是

true

,結果是t

rue

2. 一邊是

false

,結果是

false

短路特點:符号左邊是

false

,右邊不再運算 。

||

短路或
1. 兩邊都是

false

,結果是

false

2. 一邊是t

rue

,結果是

rue

短路特點: 符号左邊是

true

,右邊不再運算 。

!

取反
1.

! true

結果是

false

2.

! false

結果是

true

  • 邏輯運算符,是用來連接配接兩個布爾類型結果的運算符,運算結果都是布爾值

    true

    或者

    false

    public static void main(String[] args) { 
    	System.out.println(true && true);//true 
    	System.out.println(true && false);//false 
    	System.out.println(false && true);//false,右邊不計算 
    	System.out.println(false || false);//falase 
    	System.out.println(false || true);//true 
    	System.out.println(true || false);//true,右邊不計算
    	System.out.println(!false);//true 
    }
               

2.5 三元運算符

  • 三元運算符格式:
  • 三元運算符計算方式:
    • 布爾類型表達式結果是

      true

      ,三元運算符整體結果為結果1,指派給變量。
    • 布爾類型表達式結果是

      false

      ,三元運算符整體結果為結果2,指派給變量。
      public static void main(String[] args) { 
      	int i = (1==2 ? 100 : 200); 
      	System.out.println(i);//200 
      	int j = (3<=4 ? 500 : 600); 
      	System.out.println(j);//500 
      }
                 

三、方法入門

3.1 概述

我們在學習運算符的時候,都為每個運算符單獨的建立一個新的類和

main

方法,我們會發現這樣編寫代碼非常的繁瑣,而且 重複的代碼過多。能否避免這些重複的代碼呢,就需要使用方法來實作。

  • 方法:就是将一個功能抽取出來,把代碼單獨定義在一個大括号内,形成一個單獨的功能。

當我們需要這個功能的時候,就可以去調用。這樣即實作了代碼的複用性,也解決了代碼備援的現象。

3.2 方法的定義

  • 定義格式:
    修飾符 傳回值類型 方法名 (參數清單){ 
    	代碼... 
    	return ; 
    }
               
  • 定義格式解釋:
    • 修飾符: 目前固定寫法

      public static

    • 傳回值類型: 目前固定寫法

      void

      ,其他傳回值類型在後面的課程講解。
    • 方法名:為我們定義的方法起名,滿足辨別符的規範,用來調用方法。
    • 參數清單: 目前無參數。
    • return

      :方法結束。因為傳回值類型是

      void

      ,方法大括号内的

      return

      可以不寫。
    public static void methodName() { 
    	System.out.println("這是一個方法"); 
    }
               

3.3 方法的調用

方法在定義完畢後,方法不會自己運作,必須被調用才能執行,我們可以在主方法

main

中來調用我們自己定義好的方法。在 主方法中,直接寫要調用的方法名字就可以調用了。

public static void main(String[] args) { 
	//調用定義的方法method 
	method(); 
}
//定義方法,被main方法調用 
public static void method() { 
	System.out.println("自己定義的方法,需要被main調用運作"); 
}
           

将三元運算符代碼抽取到自定義的方法中,并調用。

public static void main(String[] args) { 
	//調用定義的方法operator 
	operator(); 
}
//定義方法,方法中定義三元運算符 
public static void operator() { 
	int i = 0; 
	i = (1==2 ? 100:200); 
	System.out.println(i); 
	int j = 0 ; 
	j = (3<=4 ? 500:600); 
	System.out.println(j); 
}
           

3.4 注意事項

  • 方法定義注意事項:
    • 方法必須定義在一類中方法外 。
    • 方法不能定義在另一個方法的裡面。
    public class Demo { 
    	public static void main(String[] args){
    	 }
    	 //正确寫法,類中,main方法外面可以定義方法 
    	 public static void method(){} 
    }
               
    public class Demo { 
    	public static void main(String[] args){ 
    		//錯誤寫法,一個方法不能定義在另一方法内部 
    		public static void method(){} 
    	} 
    }