Java運算符使用、單目、二目運算符、數據類型精度運算問題等

前言:

     Java提供了豐富的運算符,例如算術運算符、關係運算符、邏輯運算符、位運算符等;

     其中又分有單目運算符二目運算符

一、單目運算符:只對單獨一個操作元(變量)進行操作;

-------- 其中自增、自減運算符++、--就是典型的單目運算符;

自增、自減運算符的使用特點:

1、他們在使用時可以放在操作元之前,也可以放在操作元之後,不過所蘊含的意義是不一樣的;

        --- 當放在操作元之前,如 ++x ; (--x ;) 代表在使用 x 之前,先使 x 的值加 1(減1);以下代碼進行演示:

public static void main(String[] args) {
		int x = 1;
		++x;
		System.out.println(x);  //輸出x爲2
		--x;
		System.out.println(x);  //輸出x爲1
	        int y = 10;
		System.out.println(y);  //輸出y爲10
		y = ++x;                //x是先進行加1操作,再將值賦給y;
		System.out.println(y);  //輸出y爲2
		System.out.println(x);  //輸出x爲2
	}

        --- 當放在操作元之後,如 x++ ; (x-- ;) 代表在使用 x 之後,再使 x 的值加 1(減1);以下代碼進行演示:

public static void main(String[] args) {
		int x = 1;
		x++;
		System.out.println(x);  //輸出x爲2
		x--;
		System.out.println(x);  //輸出x爲1
		int y = 10;
		System.out.println(y);  //輸出y爲10
		y = x++;                //x是先將值賦給y之後,才進行加1操作的;
		System.out.println(y);  //輸出y爲1
		System.out.println(x);  //輸出x爲2
	}

2、操作元必須是一個整數類型或者浮點類型的變量,作用都是使變量的值加1或者減1;

二、二目運算符:同時對兩個操作元(變量)進行操作;

-------- 二目運算符有:

加減運算符 +,-
乘除運算符 *,/
求餘運算符 %
關係運算符 > , < , >= , <= , == , !=
賦值運算符 =

其中需要注意的是:邏輯運算符 && , || , ! 

邏輯運算符中的 && 與 || 是二目運算符 ;

邏輯運算符中的 是單目運算符 ;

算術運算符包括:加減運算符、乘除運算符、求餘運算符 ;

加減運算符:+,- ;

1、結合計算的順序是從左到右的;例如:15+5-5 ; 是先計算15+5,在將20進行減5,最後結果爲15;

2、加減運算符的操作元是整數類型或者浮點類型的數據;

3、加減運算符的優先級爲4級;

乘除運算符:*,/ ;

1、結合計算的順序是從左到右的;例如:2*8/4 ; 是先計算2*8,在將16進行除4,最後結果爲4;

2、乘除運算符的操作元是整數類型或者浮點類型的數據;

3、乘除運算符的優先級爲3級;

求餘運算符:%;

1、結合計算的順序是從左到右的;例如:2*8%2 ; 是先計算2*8,在將16進行求餘2,最後結果爲0;

2、求餘運算符的操作元是整數類型或者浮點類型的數據;

3、求餘運算符的優先級爲3級;

算術表達式指:用算術運算符和括號連接起來的 符合Java語法規則的式子;

如:x+2*y+10+5*(z+20) ;

關係運算符: > , < , >= , <= , == , != ; (大於、小於、大於等於、小於等於、等於、不等於)

1、關係運算符的運算結果是boolean類型的,不是true,就是false,當運算符對應的關係成立時,則爲true,否則爲false;

如:  5>10 ; 關係不成立,結果爲false ; 5>1 ; 關係成立,結果爲true ;

2、關係運算符中,大小關係運算:> , < , >= , <= 的優先級爲6 ;

3、關係運算符中,相等關係運算:== , != 的優先級爲7 ;

4、結合計算的順序是從左到右的;

關係表達式指:結果爲數值型的變量(x+y)或表達式(4+5)通過關係運算符形成的關係表達式;

如 x+y>4+5 ;

賦值運算符: = ;

1、對於賦值運算符,右邊的操作元必須是變量,不能是常量或者表達式;

如:x = 10 ; y = 11 ; 正確, 不能是 10 = x ;11 = y;

2、賦值運算符的優先級爲14級;

3、結合計算的順序是從右到左的;

4、賦值運算符不能跟關係運算符中的 == 等號關係運算符混淆;如 12 = 12 ; 這是錯誤的;

邏輯運算符:&& , || , ! ; (邏輯與、邏輯或、邏輯非)

 1、邏輯與 (&& )優先級爲11,當運算符左右兩邊的表達式都爲真時,整個表達式的值才爲真;

如:if( top1>0 && top2>5 )  當 top1>0 爲真  ,  top2>5 爲真 時 ,則if中表達式的值才爲真;

擴展:if( top1>10 && top2<50 )  當 top1>10 爲假時  , 則不繼續判斷 top2<50 ,默認表達式爲假 ;以下代碼進行演示:

int top1 = 1 , top2 = 2;
if(top1>10 && top2<50){
    System.out.println(top1);  //邏輯表達式爲真則輸出top1
}else{
    System.out.println(top2);  //邏輯表達式爲假則輸出top2
}

2、邏輯或 ( || )優先級爲12,對於運算符左右兩邊的表達式,當其中一邊的表達式爲真時,整個表達式的值也爲真;

如:if ( top1>10 || top2>15 )  當 top1>10 爲假  ,  則繼續對 top2>15 進行判斷 ,當top2>15爲真,則整個表達式的值爲真;

擴展:if ( top1>10 || top2>50 )  當 top1>10 爲真時  , 則不繼續判斷 top1>50 ,默認表達式爲真 ;以下代碼進行演示:

int top1 = 100 , top2 = 20;
if(top1>10 || top2>50){
    System.out.println(top1);  //邏輯表達式爲真則輸出top1
}else{
    System.out.println(top2);  //邏輯表達式爲假則輸出top2
}

3、邏輯非( ! )優先級爲2 ,將邏輯表達式的值變成相反的值;

以下代碼進行演示:top1>10 爲真,使用邏輯非之後 !(top1>10) 則爲假,最後結果輸出 20 ;

int top1 = 100 , top2 = 20;
if( !(top1>10) ){
    System.out.println(top1);  //邏輯表達式爲真則輸出top1
}else{
    System.out.println(top2);  //邏輯表達式爲假則輸出top2
}

擴展: 不同類型之間運算時的精度問題

基本數據類型的精度從 “ 低 ” 到 “ 高 ” 排列:

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

1、當表達式中有 double 類型的運算時,則按 double 類型進行運算;

如:5.6 / 2 +10  ,結果輸出 12.8 ;

2、當表達式中最高精度爲 float 類型的運算時,則按 float 類型進行運算;

如:6.6f / 2 +10  ,結果輸出 13.3 ;此時的 13.3 是 float 類型的;

double intd = 5.6/2 + 10 ;
  System.out.println(ints);    //輸出 12.8

float intf = 6.6f/2 + 10 ;     //輸出 13.3
  System.out.println(intf);
intf = intd ;   //報錯Type mismatch: cannot convert from double to float

3、當表達式中最高精度爲 long 類型的運算時,則按 long 類型進行運算;

如 :12L+9*2 , 結果輸出 30 ;此時的 30 是 long 類型的;

4、當表達式中最高精度爲 int 類型或者低於 int 類型的運算時,則按 int 類型進行運算;

如 :20 + 15 * 2 ,結果輸出 50 ;此時的 50 是 int 類型的;

        int intt = (byte) 10 + 'a' ;  結果輸出 107 ;此時的 107 是 int 類型的;

特別注意:Java中不能把超過 byte 、short 、char 的取值範圍的算術表達式的值賦給 byte 、short 、char 類型的變量;

如:byte intb = 20 + 'a' ;  結果輸出 117 ;此時的 117是int類型的常量 ;

因爲117沒有超過byte的取值範圍,所以程序編譯通過;

當:byte intbb = 40 + 'a' ;  // 報錯:Type mismatch: cannot convert from int to byte

因爲此時 40 + 'a' 輸出結果爲 137 ,已經超過了byte的取值範圍,所以程序報錯;

需要詳細瞭解爲什麼int類型常量可以直接賦予byte類型變量可以訪問下面鏈接:

https://blog.csdn.net/LagerSwan/article/details/104061692

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