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

第一章 數據類型轉換java

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

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

轉換原理圖解
byte 類型內存佔有1個字節,在和 int 類型運算時會提高爲 int 類型 ,自動補充3個字節,所以計算後的結果仍是 int 類
型。編碼

 一樣道理,當一個 int 類型變量和一個 double 變量運算時, int 類型將會自動提高爲 double 類型進行運算。spa

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

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

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

1.2 強制轉換
將 1.5 賦值到 int 類型變量會發生什麼?產生編譯失敗,確定沒法賦值。3d

int i = 1.5; // 錯誤

double 類型內存8個字節, int 類型內存4個字節。 1.5 是 double 類型,取值範圍大於 int 。能夠理解爲 double 是8
升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺去。
想要賦值成功,只有經過強制類型轉換,將 double 類型強制轉換成 int 類型才能賦值。orm

  • 強制類型轉換 :將 取值範圍大的類型 強制轉換成 取值範圍小的類型 。

比較而言,自動轉換是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數據,如何讓計算機能夠直接識別人類文字的問題呢?就產生出了編碼表的概念。

  • 編碼表 :就是將人類的文字和一個十進制數進行對應起來組成一張表格。

人們就規定:

字符  數值
0 48
9 57
A 65
Z 90
a 97
z 122

 

    • 將全部的英文字母,數字,符號都和十進制進行了對應,所以產生了世界上第一張編碼表 ASCII(American Standard Code for Information Interchange 美國標準信息交換碼)。

小貼士:
在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);//計算結果是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("5+5="+5+5);//輸出5+5=55   
}

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 或者 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  邏輯運算符

  •  邏輯運算符,是用來鏈接兩個布爾類型結果的運算符,運算結果都是布爾值 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  三元運算符

  • 三元運算符格式:
數據類型 變量名 = 布爾類型表達式?結果1:結果2
  • 三元運算符計算方式:
    • 布爾類型表達式結果是 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調用運行");  
}

3.4 調用練習
將三元運算符代碼抽取到自定義的方法中,並調用。

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.5 注意事項

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

第四章 JShell腳本工具
JShell腳本工具是JDK9的新特性
何時會用到 JShell 工具呢,當咱們編寫的代碼很是少的時候,而又不肯意編寫類,main方法,也不肯意去編譯和運
行,這個時候可使用JShell工具。
啓動JShell工具,在DOS命令行直接輸入JShell命令。

 接下來能夠編寫Java代碼,無需寫類和方法,直接寫方法中的代碼便可,同時無需編譯和運行,直接回車便可

小貼士:
JShell工具,只適合片斷代碼的測試,開發更多內容,建議編寫在方法中。

第五章 擴展知識點
5.1 += 符號的擴展
下面的程序有問題嗎?

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.

5.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類型,所以編譯失敗。
在jshell中體現:

相關文章
相關標籤/搜索