1-------java表達式的值的左邊值:java
a=3; 此賦值表達式的值爲3;code
計算長串表達式的值的時候,注意從左往右計算。例如編譯
public static void main(String[] args) { // TODO Auto-generated method stub int a=1; //int b=a+(a=2)+a+(a=3); int k=(a=a+(a+(a=2)+a)+a)+3; System.out.println(a); //System.out.println(b); System.out.println(k); } //輸出8,11.注意a的值常常改變
2,算術表達式class
int a=1; int b=2; int c=3; System.out.println(a+b+c); //1,找a,2讀+,3,找b同時讀取後面+判斷優先級。4進行運算計算結果和a相加 int i=1; int j=2; int k=(i=3)+(j=4)+i*j; System.out.println(k); //結果輸出19,前面的賦值語句先執行,以後的i*j語句執行的時候數據改變了。 //a%b式子中,由a的符號決定結果的符號,兩個數的絕對值提供結果的。 //判斷奇數和偶數,不能判斷對於1的問題 public static boolean isOdd(int i){ return i % 2 != 0; }
3,i++和++i運算符變量
int i=1; System.out.println(i+++i+++i++); //6 int i=1; System.out.println(i++ + ++i+i++ + ++i); //12
輸出結果 6 拆分的時候從後往前拆分。即 i++ + i++ + i++ = 1+2+3=6.object
++必須是一個變量。im
4,關係運算符 ==數據
int a=10; int b=10; double c=10.0; //左邊右邊類型一致,直接比較 System.out.println(a==b); //先將a的值提高爲double類型,再比較 System.out.println(a==c); 因此兩個都是true
5,小數問題,和int類型賦值給byte類型會報錯,由於會損失精讀:static
5;邏輯表達式 &的優先級高於|img
因此 true|flase&false 的結果是true
6:三目運算符;
int a=10; double b=5.0; System.out.println(a>b?a:b); 首先會類型轉換。轉化成double,三目運算表達式的值是 10.0 //int類型和boolean類型 只能轉化爲原始object類型 因此轉化爲obj類型了。 System.out.println(3>2?1:true); Object obj=3>2?1:true; System.out.println(obj);
7:注意賦值表達式:
short i=1; //第一個表達式會報錯,由於int不能賦值給int類型。直接編譯不能經過了 i=i+1; //第二個運算後的結果和左邊的類型一致,因此它仍是short類型。 i+=1;
8:注意賦值運算符是優先級最低的;
int i=0; for(int j=0;j<10;j++){ i=i++; } System.out.println(i); //輸出的結果仍是0