Java基礎語法(二)——數據類型擴展與運算符詳解

1、前言

​ 上文咱們講解了有關java編程基礎語法的變量與關鍵字的知識點,本文將主要對java基礎語法中的運算符進行講解。java

​ 在講解語法以前咱們先來說一下真正的開發環境。面試

2、Java集成開發環境

2.1eclipse的使用方法

​ 以前咱們在體驗java編程或者寫小的demo的時候,都是命名一個.java的源文件,在dos界面中編譯和運行,可是這樣給人的感受並不友好,爲了解決這一問題,一些大佬便開發了與各類語言對應的集成開發環境,其中包含文本編輯處理,自動編譯,簡化運行,隨時進行代碼調試。編程

​ 目前來講,比較流行開源的集成開發環境:eclipse、IDEA、NetBeanseclipse

​ 對於初學者而言,eclipse推薦使用,並且用的也比較多。編程語言

​ 注意:安裝的eclipse須與以前安裝的jdk位數一致(個人是64位的)這裏具體的安裝步驟比較簡單,就不贅述了,你們能夠在網上查找視頻更加方便直接。ide

​ eclipse用法:安裝後打開eclipse軟件,使用前經過如下方法設置。工具

​ 一、選擇工具欄的窗口——首選項——彈出對話框選擇常規下拉菜單中的啓動和關閉以下圖設置:學習

Java基礎語法(二)——數據類型擴展與運算符詳解

​ 二、選擇菜單欄中的文件——從新啓動;就會彈出以下對話框字體

Java基礎語法(二)——數據類型擴展與運算符詳解

​ 三、如何使用其來編寫、編譯和執行java程序?3d

菜單欄選擇文件——新建——其餘——Java項目,談出以下對話框

Java基礎語法(二)——數據類型擴展與運算符詳解

以後軟件右側會生成一個你本身命名的項目名稱的文件夾;點開選擇src——右鍵選擇新建——class(類),彈出以下對話框,進行設置;
Java基礎語法(二)——數據類型擴展與運算符詳解

Java基礎語法(二)——數據類型擴展與運算符詳解

字體設置能夠在窗口——首選項——外觀——顏色和字體上設置——文本字體設置,以下圖所示:

Java基礎語法(二)——數據類型擴展與運算符詳解

​ 咱們經過上面介紹的集成開發環境來回顧以前的學習內容。編寫以下代碼:

public class Test {
    public static void main(String[] args) {
        System.out.println("hello world");
    }

}

那麼咱們如何編譯運行呢?

eclipse集成開發環境中咱們只要使用菜單欄中的運行按鈕就能夠自動編譯運行了,是否是很是方便。以下圖所示:

Java基礎語法(二)——數據類型擴展與運算符詳解

以上就是關於eclipse的具體設置方法和運行java程序的步驟了。

3、變量和數據類型回顧

​ 咱們繼續在方纔的代碼案例中回顧變量和幾種數據類型吧。

一、基本數據類型

public class Test {
    public static void main(String[] args) {
        //System.out.println("hello world");

        int i = 0;
        i = 1;
        int j = 2;
        i = j;
        System.out.println(i);
    }

}

輸出的結果爲 2,這說明變量是會隨着賦值改變而改變,同一類型的變量之間也能夠互相賦值。但若是是不一樣類型的呢?好比將上面的i賦值給byte k 就會報錯了。可是賦值給long就能夠。

public class Test {
    public static void main(String[] args) {
        //System.out.println("hello world");

        /*int i = 0;
        i = 1;
        int j = 2;
        i = j;
        System.out.println(i);*/

        int i = 2;
        byte a = i;
        long b = i;
        System.out.println(b);
    }

}
//結果以下圖所示

Java基礎語法(二)——數據類型擴展與運算符詳解

咱們能夠給出下面的包含轉換關係:

char、byte、short(此三者不能夠互相轉換)——》int——》long——》float——》double

咱們稱這種轉換爲系統的自動轉換,那麼可想而知,假設有多種類型的數據混合運算時,系統首先會將全部的數據自動轉換爲容量(表數範圍)最大的那種數據類型,而後進行運算。

二、字符類型運算

public class Test {
    public static void main(String[] args) {
        /*int i = 1;
        short a = 2;
        byte b = 3;
        int value = i + a + b;
        System.out.println(value);*/

        char c = 'a';
        int d = 1;
        int e = c + d;
        System.out.println(e);
    }

}

結果爲98,表示這個c字符爲97,緣由是因爲ASCII碼,你們能夠百度查詢一下;這個結果代表char類型的 數據在與數字進行數學運算時,是轉爲對應的ASCII碼進行計算。

三、字符串混合運算

注意!!!

當把任何基本類型的值和字符串值進行鏈接運算時(+),基本類型的值將自動轉換爲字符串類型。例如:

public class Test {
    public static void main(String[] args) {
        String s = "hello";
        int a = 1;
        String str = s + a;
        System.out.println(str);
        //上面兩行代碼能夠簡化爲:System.out.println(s+a);
    }
}

運行結果:hello1

體會下圖代碼運行的結果:

Java基礎語法(二)——數據類型擴展與運算符詳解

小結:在進行包含字符串的混合運算時,字符串前面的運算爲正常運算,後面的全部類型都轉換爲字符串類型的計算。

四、強制類型轉換

概念——自動類型轉換的逆過程,將表數範圍大的數據類型轉換爲小的數據類型。

一、使用是要加上強制轉換符(()),即英文括號,但這可能形成精度下降或溢出,要特別注意。

例如:

public class Test {
    public static void main(String[] args) {

        int c = 9;
        byte b = (byte)c;//數據類型使用英文括號括起來

        System.out.println(b);
    }

}

運行結果:9

二、一般,字符串不能直接轉換爲基本類型,但經過基本類型對應的包裝類型能夠實現將字符串轉換成基本類型。例如:

public class Test {
    public static void main(String[] args) {

        String  a = "43";

        int i =  Integer.parseInt(a);
        System.out.println(i);
    }

}

運行結果:43

三、注意!!!

Boolean類型不能夠轉換爲其餘的數據類型

4、運算符

​ 下面咱們來談談在java編程語言中運算符的相關知識。

​ 簡單而言,運算符是一種特殊的符號,用以表示數據的運算、賦值和比較等。分爲如下幾類:

​ 算術運算符、賦值運算符、比較(關係)運算符、邏輯運算符、位運算符、三元運算符。下面逐一介紹。

4.1算數運算符

算數運算符的種類以下圖所示

Java基礎語法(二)——數據類型擴展與運算符詳解

加減乘除就不用解釋了,正常的數學運算。你們本身能夠實踐去敲代碼驗證。舉幾個例子給你們去本身驗證:

public class Test {
    public static void main(String[] args) {

        System.out.println(- 2);
        System.out.println(- -2);
        System.out.println(6 / 2);
        System.out.println(6 / 5);
        System.out.println(6.0 / 5.0);
        System.out.println(6.44 / 3.0);
    }

}

結果以下圖所示:

Java基礎語法(二)——數據類型擴展與運算符詳解

代表整數之間的除法是取整的,小數則不是如此。

上面的%表示取模就是去餘數,比如7%5就是2;

++表示自增--表示自減;上面的解釋仍是比較理論了,仍是經過實際demo來體會驗證一波吧:

public class Test {
    public static void main(String[] args) {

        int i = 0;
        int j = 0;
        int m = i++;
        int n = ++j;

        System.out.println(i);
        System.out.println(j);
        System.out.println(m);
        System.out.println(n);

    }

運行結果以下:

Java基礎語法(二)——數據類型擴展與運算符詳解

從以上結果能夠看出,i++給變量賦值時是想將本身的值賦值給變量,而++i則是將本身增長以後的值賦值給變量,可是最終的結果都會使自身(上例中的i和j)增長1,同理--也是同樣。

固然+號也能夠用於字符串的拼接,前面咱們已經舉過例程,再也不贅述了。

4.1.1算數運算符須要注意的一些問題

一、取餘(取模)——%

若是對負數取模,能夠把模數負號忽略不計,如:5%-2=1.可是被模數是負數則不可忽略。此外,取模運算的結果不必定老是整數。例:

public class Test {
    public static void main(String[] args) {

        System.out.println(5 % -2);
        System.out.println(-5 % 2);
        System.out.println(5 % -2.1);

    }

}

運行結果以下:

1
-1
0.7999999999999998

二、整數之間的除法只保留整數部分,例:

int x = 3512;
x = x/1000*1000;

結果是3000;

三、「+」除字符串相加之外,也能夠將非字符串轉換爲字符串,例:

System.out.println("5+5="+5+5);

結果是:5+5=55,這裏是字符串拼接前面講述過的。

四、單引號和雙引號的區別

看下面實例:

public class Test {
    public static void main(String[] args) {

        System.out.println('*' + '\t' + '*');
        System.out.println("*" + "\t" + "*");
    }

}

結果以下:

Java基礎語法(二)——數據類型擴展與運算符詳解

單引號表示單個字符,計算時會轉換爲ASCII碼運算,而雙引號則是正常輸出,\t表示的是一個Tab鍵的間距。

4.2賦值運算符

符號「=」;當「=」兩側數據類型不一致時,可使用自動類型轉換或使用強制類型轉換原則進行處理;

支持連續賦值

擴展賦值運算符:+=;-=;*=;/=;%=;下面經過實際案列代碼進行剖析:

public class Test {
    public static void main(String[] args) {

        int i = 1;
        short s = 2;

        i = s;//自動類型轉換
        s = (short)i;//強制類型轉換

        int j=2;
        int k=2;
        j=k=2;//運行連續賦值
        System.out.println(j + "," + k);//輸出結果應爲:2,2

        //擴展賦值運算舉例
        i = i + 2;//能夠換成如下寫法(這裏i初始值爲2了)
        i += 2;//i變爲6
        System.out.println(i);//輸出結果應爲6

        //s = s + 2;錯誤寫法由於s會被自動轉換爲int類型的變量,改成s = (short)(s + 2);
        s += 2;//這種寫法是否是更加方便?自動強制類型轉換了。
        System.out.println(s);//輸出結果應爲4
    }

}

結果以下:

2,2
6
4

使用擴展運算符時,變量在參與運算時會把結果強制轉換爲當前變量的類型。

那麼思考下面的一個問題:

public class Test {
    public static void main(String[] args) {

        int i = 1;
        i *= 0.1;
        System.out.println(i);
    }

}

結果爲0

緣由:擴展運算自動強制轉換爲int類型

4.3比較運算符

比較運算符就是用於比較的,諸如比較是否相等,大於小於等等。

比較運算符以下:

Java基礎語法(二)——數據類型擴展與運算符詳解

比較運算符的結果是boolean型,即結果爲true 或者 false;在後面咱們講解控制流程語句中會使用的很是多,下面舉簡單的例子體會一下:

public class Test {
    public static void main(String[] args) {

        System.out.println(4>5);
        System.out.println(4<5);
    }

}

結果爲:

false
true

4.4邏輯運算符

邏輯運算符——用於邏輯判斷,學習過數字電路的應該很是熟悉了。下面直接羅列出來:

&——邏輯與 |——邏輯或 !——邏輯非

&&——短路與 ||——短路或 ^——邏輯異或

第一行可能很多人都比較熟悉,而第二行有些就不太清楚了;咱們先看下面一張表:

Java基礎語法(二)——數據類型擴展與運算符詳解

邏輯與——表示a和b都爲true才成立;邏輯或——表示a或b有一個成立就能夠;邏輯非——表示去反邏輯;邏輯異或——表示a和b有一個成立且一個不成立才爲true;短路與——和邏輯與判斷的結論是一致的;短路或——和邏輯或判斷的結論是一致的。

下面給出例程:

public class Test1 {
    public static void main(String[] args) {
        System.out.println(4 == 4 & 1 == 1);
        System.out.println(4 == 4 && 2 == 1);
        System.out.println(4 == 4 || 1 != 1);
    }
}

運行結果:

true
false
true

4.4.1邏輯運算符實際使用是須要注意的地方

一、邏輯運算符用於鏈接布爾型表達式,在Java中不能夠寫成3<x<6,應該寫成x>3 & x<6 。

二、「&」和「&&」的區別:

  • 單&時,左邊不管真假,右邊都進行運算;
  • 雙&時,若是左邊爲真,右邊參與運算,若是左邊爲假,那麼右邊不參與運算。

舉個例子驗證一下:

public class Test1 {
    public static void main(String[] args) {

        int i = 0;
        int j = 1;
        System.out.println(i != 0 & j++ == 2);
        System.out.println(j);//單&左邊爲真或假右邊都執行運算,此時j=2

        System.out.println(j == 2 && i++ == 1);
        System.out.println(i);//雙&左邊爲真,右邊參與運算,此時i=1

        System.out.println(j != 2 && i++ == 2);
        System.out.println(i);//雙&&左邊爲假,右邊不運算,此時i仍爲1
        //以上輸出判斷語句的結果都爲false
    }
}

結果:

false
2
false
1
false
1

三、「|」和「||」的區別同理,||表示:當左邊爲真,右邊不參與運算。

public class Test1 {
    public static void main(String[] args) {

        int i = 0;
        int j = 1;
        System.out.println(i != 0 | j++ == 1);//注意和++j的區別,看最下面的++i
        System.out.println(j);//單|左邊爲真或假右邊都執行運算,此時j=2

        System.out.println(j == 2 || i++ == 0);
        System.out.println(i);//雙|左邊爲真,右邊不參與運算,此時i=0

        System.out.println(j != 2 || ++i == 1);
        System.out.println(i);//雙|左邊爲假,右邊參與運算,此時i=1
        //以上判斷的結果都爲true
    }

結果以下:

true
2
true
0
true
1

小結:在不須要邏輯運算兩邊都參與運算的時候,儘可能使用&&和||

四、異或( ^ )與或( | )的不一樣之處是:當左右都爲true時,結果爲false。

理解方法口訣:異或,追求的是「異」!

4.5位運算符

位運算是直接對二進制進行運算,請看下面表格:

Java基礎語法(二)——數據類型擴展與運算符詳解

編程的時候通常比較少可是面試筆試的時候比較多,所以仍是須要了解的。可能有些朋友對二進制還不太瞭解,能夠百度一下,不算難的哈!

4.5.1移位運算符

下面舉例說明爲運算符使用時左移右移和無符號右移。

public class Test1 {
    public static void main(String[] args) {

    int x = 8,y = -16;
    System.out.println(x<<2);//至關於8*2*2
    //二進制中8:表示爲1000,左移兩位即0010 0000
    System.out.println(x>>2);//至關於8/(2*2)
    //右移兩位即0010
    System.out.println(y>>2);
    //負數二進制-16:表示爲1111 0000(驗證其實很簡單加上16的二進制看看是否爲0便可);
    //右移兩位即:0011 1100(-4),4的二進制爲:0000 0100
    //以上兩個例子都是有符號的右移,下面舉例講一下無符號的右移(表示爲>>>)
    System.out.println(x>>>2);//無符號(正數)右移>>>等同於>>

    System.out.println(y>>>2);//負整數右移>>>則不等同,表示無符號的右移忽略符號
    //>>>無符號的右移對於負數而言是不考慮符號位的,因此輸出的結果數據比較大。
    }
}

輸出結果:

32
2
-4
2
1073741820

規律小結:

一、有符號的右移是看右移以後的首位是0仍是1,是0前面空位補0,1則補1;

二、無符號的右移,移動以後無論首位是0仍是1,空位都是直接補0

4.5.2與運算符、或運算符和異或運算符

這三者看了前面的內容可能對此有疑問,這不是邏輯運算符嗎?其實並非,這裏的&、|和^有另外的意義和用處,這也離不開二進制計算的,下面舉例逐一解釋。

public class Test1 {
    public static void main(String[] args) {

        int a = 12 , b = 5;
        //對比一下位運算符和邏輯運算符的區別,再回顧一下邏輯運算符中&和&&區別和聯繫
        System.out.println(a & b); //&與運算符
        //計算方法:12的二進制(省略前面的28個0):1100,5的二進制爲:0101 與運算其實就是作每個二進制位的邏輯加法:都爲1才爲1
        // 1100
        //&0101
        //=0100,結果爲4
        //具體解釋:&符號在邏輯運算符中表示且,而計算機中1表示true ,0表示false
        //那麼只有都爲真的時候才爲真,因此12 & 5 的結果爲4
        System.out.println(a == 12 & b == 5);
        //表示邏輯判斷,其實就是下面的寫法:(後面學到控制流程語句就會明白的)
        if(a == 12 & b == 5) {
            System.out.println(true);
        }

        //=====================================
        //下面介紹一些或運算和異或運算
        System.out.println(a | b);// |表示或運算符
        //計算方法:不都爲0則爲1
        // 1100
        //|0101
        //=1101,結果爲13其含義是兩個數之間的每一個二進制位之間不都爲0則或運算的結果爲1
        //異或運算
        System.out.println(a ^ b);// ^ 這裏表示異或運算符
        //計算方法:兩者不一樣則爲1
        // 1100
        //^0101
        //=1001,結果爲9
    }
}

結果以下:

4
true
true
13
9

規律小結:

&、|、^三者做爲位運算符進行數字運算時,須要將其轉換爲二進制,而後對每一位二進制數進行對應的邏輯運算便可。理解上面說的方法本身,而後敲一下代碼理解消化一下!

4.5.3反碼運算符

~,這就是反碼運算符;看代碼案例:

public class Test1 {
    public static void main(String[] args) {
        //反碼演示舉例
        System.out.println(~5);
        //計算方法:
        //12 的二進制:0000 1100,按位取反爲1111 0011,結果爲-13能夠經過源碼驗證
        //其實簡單計算的話12去反碼以後的值與自身相加爲-1,緣由你們能夠自行了解計算機二進制中原碼、反碼和補碼的聯繫
        //簡述規律:補碼=原碼的反碼加1,補碼就是負數在二進制中表示的方法
    }
}

結果爲:-13

規律小結:反碼比較簡單,就是將源碼按位取反,

4.5.4位運算符總結

一、首先在編程使用的過程當中通常用的不如邏輯運算符,但咱們須要知道其核心原理;

二、其次要了解位運算過程,知道運算的核心方法;

三、最後須要本身瞭解和理解計算機二進制數的表示方法以及原碼、反碼和補碼的換算方法;

規律總結請看下圖表:

Java基礎語法(二)——數據類型擴展與運算符詳解

4.6三元運算符

概念:三元運算符,或爲三目運算符。

格式:(條件表達式)? 表達式1:表達式2;

咱們舉例來理解:

public class Test1 {
    public static void main(String[] args) {

        int a = 1;

        int k = a > 0 ? 1 : 0;
        System.out.println(k);
    }
}

結果爲:1

其表示的含義爲,判斷a的值是否大於0,若a大於0則將1賦值給看,反之將0賦值給k。

那麼三目運算符在編程中究竟有什麼用呢?能夠方便書寫簡化代碼。

例如這樣的一個問題:如何獲取兩個中較大的數?

public class Test1 {
    public static void main(String[] args) {

        int a = 1 ,b = 4;

        int k = a > b ? a : b;
        System.out.println(k);
    }
}

若是不使用三目運算符則須要進行條件控制語句判斷,下一篇文章將着重講述關於流程控制語句。

那麼再考慮一個問題:如何獲取三個數中最大的數?看代碼

public class Test1 {
    public static void main(String[] args) {

        int a = 1 ,b = 4,c = 6;

        int k = (a > b ? a : b) > c ? (a > b ? a : b) : c ;
        //先判斷a和b的大小,選出其中大的再與c比較大小,最後輸出最大的。也能夠寫成下面的方法
        //int k = (a > b ? ( a > c ? a : c) : (b > c ? b : c));
        //假設方法進行判斷,a大於b則讓a再與c比較,不然讓b與c比較,輸出最大的;
        System.out.println(k);
    }
}

結果爲:

6

6

這就是三目運算符的嵌套使用。

5、運算符的優先級

​ 運算符上面已經講述完了,可是咱們考慮一個問題,當各類運算符混合使用的時候該先執行誰呢?這就涉及到優先級了。

運算符的優先級排列順序請看下圖:

Java基礎語法(二)——數據類型擴展與運算符詳解

優先級數字越小則優先級越高,結合性上看就是按照上述聲明,從左到右就是左邊的優先級高,從右到左就是右邊的優先級更高。

關於優先級,其實咱們不須要刻意去記憶,由於當咱們在編寫程序的時候爲了方便本身和他人理解都會避免使用過於複雜的運算符,或者加上英文括號來更好地解釋本身的代碼。

6、總結

​ 本文簡單介紹了java的集成開發環境,對eclipse軟件的基礎使用作了一些配置,其次回顧加深了對java編程中變量和數據類型轉換的理解;最後介紹了java編程基礎中的6種運算符的相關知識。

​ 初學者務必多敲多練多反思,謝謝您的閱讀~!

相關文章
相關標籤/搜索