數據類型轉換、運算符和方法入門介紹

一、 數據類型轉換

Java程序中要求參與的計算的數據,必須要保證數據類型的一致性,如果數據類型不一致將發生類型的轉換。

一個 int 類型變量和一個 byte 類型變量進行加法運算, 結果會是什麼數據類型?

int i = 1;byte b = 2;

運算結果,變量的類型將是 int 類型,這就是出現了數據類型的自動類型轉換現象。

1. 自動轉換

概念:將 取值範圍小的類型自動提升爲取值範圍大的類型。

public static void main (String[] args){
		int i =1;
		byte b =2;
		//byte j = i + b;//報錯,除非進行類型的強轉
		//int類型和byte類型運算,結果是int類型
		int j = i  + b;
		System.out.println(j);
 }		

轉換原理圖解
byte 類型內存佔有1個字節,在和 int 類型運算時會提升爲 int 類型 ,自動補充3個字節,因此計算後的結果還是 int 類 型。
在這裏插入圖片描述
同樣道理,當一個 int 類型變量和一個 double 變量運算時, int 類型將會自動提升爲 double 類型進行運算。

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

轉換規則
範圍小的類型向範圍大的類型提升, byte、short、char 運算時直接提升爲 int 。

byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

2. 強制轉換

概念:將取值範圍大的類型強制轉換成取值範圍小的類型 。
將 1.5 賦值到 int 類型變量會發生什麼?產生編譯失敗,肯定無法賦值。

int i = 1.5; // 錯誤

double 類型內存8個字節, int 類型內存4個字節。 1.5 是 double 類型,取值範圍大於 int 。可以理解爲 double 是8 升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺去。
想要賦值成功,只有通過強制類型轉換,將 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);

3. ASCII編碼表

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

在計算機的內部都是二進制的0、1數據,如何讓計算機可以直接識別人類文字的問題呢?就產生出了編碼表的概念。
編碼表 :就是將人類的文字和一個十進制數進行對應起來組成一張表格。
在這裏插入圖片描述
將所有的英文字母,數字,符號都和十進制進行了對應,因此產生了世界上第一張編碼表ASCII( American Standard Code for Information Interchange 美國標準信息交換碼)。

小貼士: 在char類型和int類型計算的過程中,char類型的字符先查詢編碼表,得到97,再和1求和,結果爲98。char類型提升 爲了int類型。char類型內存2個字節,int類型內存4個字節.

二、運算符

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);//計算結果是2 

}

變量 後++ :變量a先把自己的值1,賦值給變量b,此時變量b的值就是1,變量a自己再加1。a的結果是2,b 的結果是1。

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("6+6="+6+6);//輸出6+6=66 

}

2. 賦值運算符

在這裏插入圖片描述

  • 賦值運算符,就是將符號右邊的值,賦給左邊的變量。
public static void main(String[] args){ 

		int i = 5; 
		i+=5;//計算方式 i=i+5 變量i先加5,再賦值變量i 
		System.out.println(i); //輸出結果是10 

}

3. 比較運算符

在這裏插入圖片描述

  • 比較運算符,是兩個數據之間進行比較的運算,運算結果都是布爾值 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 

}

4. 邏輯運算符

在這裏插入圖片描述

  • 邏輯運算符,是用來連接兩個布爾類型結果的運算符,運算結果都是布爾值 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);//false 
		System.out.println(false || true);//true 
		System.out.println(true || false);//true,右邊不計算  	   
		System.out.println(!false);//true 

}

5. 三元運算符

  • 三元運算符格式:

      數據類型 變量名 = 布爾類型表達式?結果1:結果2
    
  • 三元運算符計算方式:
    布爾類型表達式結果是true,三元運算符整體結果爲結果1,賦值給變量。
    布爾類型表達式結果是false,三元運算符整體結果爲結果2,賦值給變量。

public static void main(String[] args) { 
		
		int i = (1==2 ? 10 : 20);
	    System.out.println(i);//20 
	    int j = (3<=4 ? 50 : 60); 
	    System.out.println(j);//50 

}

三、方法入門

1. 概述

我們在學習運算符的時候,都爲每個運算符單獨的創建一個新的類和main方法,我們會發現這樣編寫代碼非常的繁瑣,而且 重複的代碼過多。能否避免這些重複的代碼呢,就需要使用方法來實現。

  • 方法:就是將一個功能抽取出來,把代碼單獨定義在一個大括號內,形成一個單獨的功能。
    當我們需要這個功能的時候,就可以去調用。這樣即實現了代碼的複用性,也解決了代碼冗餘的現象。

2. 方法的定義

  • 定義格式:

      修飾符 返回值類型 方法名 (參數列表){ 
      		
      		代碼... return ; 
      }	
    
  • 定義格式解釋:

    • 修飾符: 目前固定寫法 public static 。
    • 返回值類型: 目前固定寫法 void ,其他返回值類型在後面的課程講解。
    • 方法名:爲我們定義的方法起名,滿足標識符的規範,用來調用方法。
    • 參數列表: 目前無參數, 帶有參數的方法在後面的課程講解。
    • return:方法結束。因爲返回值類型是void,方法大括號內的return可以不寫。
  • 舉例:

public static void methodName() { 

		System.out.println("這是一個方法"); 

}

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); 

}
  • 注意事項
  • 方法定義注意事項:
    • 方法必須定義在一類中方法外
    • 方法不能定義在另一個方法的裏面
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(){} 

	} 
		}

4.補充說明

  • +=符號的擴展
    下面的程序有問題嗎?
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=b2 + b3; 
		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類型,因此編譯失敗。

客官既然來了,點個贊再走唄,關注博主不迷路,哈哈哈~
在這裏插入圖片描述

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