運算符
算術運算符
+加 -減 *乘 /除 %取模 ++自增 --自減 +字符串拼接運算
注意:
1. 兩個int類型運算完後之後,結果一定是int類型
2. byte和short類型在進行運算的時候,底層會自動提升爲int類型,然後進行計算
3. 對於byte b = 3 + 4; JVM在編譯的時候會進行優化,編譯完成之後,實際上這句話就已經成了byte b = 7; byte=127+3--錯 超過範圍
% 取模--取餘
103%3 = 1 2%5 = 2 4%2=0
-5%3=-2 -1% 3=-1
5%-3=2 1%-3=1
-5%-3=-2
對於負數的取餘,先按照正數的取餘運算,運算完成之後,看%左邊的數字的符號,如果左邊的數是正數,結果就是正數,如果左邊的數字是負數,結果是就是負數。
3.2%2=1.2 3%1.2=0.6 -3.5%1.7=-0.1
++ 自增
相當於在原來的基礎上加了1 ->i = i + 1;
只有自增運算的時候,++在前在後結果一樣。
++在前,這個變量是先自增,然後再參與其他的運算 int i = 5; int j = ++i;--> i = j = 6;
++在後,先進行其他運算,然後這個變量再自增 int i = 5; int j = i++; i=6;j = 5;
int i = 5;
int j = i++ + ++i; j=5+7=12
int j = ++i + i++; j=6+6=12
byte類型的數據可以進行自增運算嗎?
byte b = 3;
b++;---可以
在運算完成之後,Java在底層會對結果做一次強制類型的轉換,原來是byte類型就再轉換會byte類型
byte b = 127;
b++; ----編譯無問題
+ 字符串拼接運算
“a” + “b” ->“ab”
2 + “a” ->“2a”
2 + 3 + “a” ->“5a”
2 + ‘a’ -> 99 ‘a’阿斯科碼爲97
“a” + 2 + 3 ->“a23”
“a” + true->“atrue”
賦值運算符
= += -= *= /= %= &= |= ^=
=進行賦值運算
int i = 5;
i += 2; -> i = i + 2;
byte b = 25;
b += 5;---> 可以
除了=以外的賦值運算符,在使用之前,這個變量必須有初始值。
比較/關係運算符
==等於 !=不等於 ><>= <= instanceof
3 != 4--> true
3 > 4-> false
instanceof 用來判斷對象與類的關係的
“abc” instanceof String -> true
邏輯運算符
&And 與 | OR 或 !NOT非 ^異或 &&短路與 ||短路或
true&true=true true&false=false false&true=false false&false=false
true|true=true true|false=true false|true=true fasle=false=false
!true=false !false=true
true^true=false true^false=true false^true=true false^false=false
異或 相同爲false 不同爲false 1是true ,0是false
&&短路與,運算規則和&完全一樣,但是&&有短路特性,如果&&之前的運算結果確定爲false,那麼&&之後的運算就不再進行了。對於||而言,如果前邊的表達式的結果爲true,則後邊的表達式就不再運算。
&&與||能夠提高代碼效率 如果第一的條件判斷確定了 後面的判斷可以不進行,而&和|兩個條件都需要判斷
位運算符
&與 |或 ^異或 <<左移 >>右移 >>>無符號右移 ~取反
注意:位運算是針對整數進行運算的
數據在計算機中是以補碼形式來存儲的。最高位是一個符號位---如果是正數,最高位爲0,如果是負數,最高位爲1. 對於正數而言,原反補三碼一致。負數的反碼是在原碼的基礎上,最高位不變,其餘位0->1,1->0,負數的補碼是在反碼的基礎上+1
6- 00000000 00000000 00000000 00000110---原碼/反碼/補碼
-6 - 10000000 00000000 00000000 00000110---原碼
11111111 11111111 11111111 11111001---反碼
11111111 11111111 11111111 11111010---補碼
反推
11111111 11111111 11111111 11101101---補碼
11111111 11111111 11111111 11101100---反碼
10000000 00000000 00000000 00010011---原碼--- -19
3 & 4------011&100----000 1是true ,0是false
交換值的方式
方式一:
int i = 3,j = 4;
int temp = i;
i = j;
j = temp;
方式二:
int i = 3, j = 4;
i = i + j;
j = i - j; -> j = i + j - j-> j = i;
i = i - j;-> i = i + j - i-> i = j;
i += j; j = i - j;i-=j;
方式三:僅針對整數
int i = 3, j = 4;
i = i ^ j;
j = i ^ j; -> j = i ^ j ^ j-> j = i
i = i ^ j; -> i = i ^ j ^ i-> i =j;
i^=j; j^=i; i^=j;
三元運算符
邏輯值 ? 表達式1 :表達式2;
如果邏輯值爲true的話,執行表達式1,;反之執行表達式2
從控制檯獲取數據:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
double d = s.nextDouble(); // 獲取小數
int i = s.nextInt(); // 獲取整數
String str = s.nextLine(); // 獲取一行
+ 字符串拼接運算
String s = “a”;
s = s + “b”; -> s = “ab”
可以利用+將兩個字符串進行拼接,或者也可以利用+將任何數據與字符串進行拼接
運算符優先級:從左到右
[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> < > < = > = == != & ^ && || ? :
括號>單元操作符>算術運算符>移位操作符>關係運算符>位運算符>邏輯運算符>三元操作符>賦值運算符