運(yùn)算符概述
概念:對(duì)常量或者變量進(jìn)行操作的符號(hào)。用運(yùn)算符把常量或者變量連接起來符合java語法的式子就可以稱為表達(dá)式。不同運(yùn)算符連接的表達(dá)式體現(xiàn)的是不同類型的表達(dá)式。
運(yùn)算符按照其要求的操作數(shù)數(shù)目來分,可以有單目運(yùn)算符(1 個(gè)操作數(shù))、雙目運(yùn)算符(2 個(gè) 操作數(shù))和三目運(yùn)算符(3 個(gè)操作數(shù))。
運(yùn)算符按其功能來分,有算術(shù)運(yùn)算符、賦值運(yùn)算符、 關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符等等
下面我們就來學(xué)習(xí)一下常用的運(yùn)算符
算術(shù)運(yùn)算符
Java中的算術(shù)運(yùn)算符,如下圖所示
實(shí)例文章來源:http://www.zghlxwxcb.cn/news/detail-804994.html
public class Demo {
public static void main(String[] args) {
// + - * : 跟小學(xué)數(shù)學(xué)的運(yùn)算方式一樣
System.out.println(10 + 20); // 30
System.out.println(10 - 20); //-10
System.out.println(10 * 20); // 200
/*
/ : 整數(shù)相除,結(jié)果只能得到整數(shù),如果想要得到帶有小數(shù)的結(jié)果,必須加入小數(shù)(浮點(diǎn)類型)的運(yùn)算
*/
System.out.println(10 / 2); // 5
System.out.println(10 / 3); // 3
System.out.println(10 / 3.0); // 3.3333333333333335
/*
%(取模) : 取余數(shù) 5 / 2 = 商2, 余數(shù)為1
*/
System.out.println(5 % 2); // 1
}
}
“+”號(hào)的兩種用法
-
第一種:對(duì)于
+
兩邊都是數(shù)值的話,+
就是加法的意思
public class Demo {
public static void main(String[] args) {
// char類型參與算術(shù)運(yùn)算,使用的是計(jì)算機(jī)底層對(duì)應(yīng)的十進(jìn)制數(shù)值。
char c = 'a';
System.out.println(c+ 1);//98
// 兩邊都是數(shù)值
System.out.println(1+2);// 3
System.out.println(1+1.2); //2.2
}
}
-
第二種:對(duì)于
+
兩邊至少有一邊是字符串得話,+
就是拼接的意思。“+”符號(hào)與字符串運(yùn)算的時(shí)候是用作連接符的,其結(jié)果依然是一個(gè)字符串。
public class Demo {
public static void main(String[] args) {
int a = 5;
//能算則算,不能算就拼接在一起。
System.out.println("abc" + 'a'); // abca
System.out.println("abc" + a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc" + 5 + 'a'); //abc5a
System.out.println(15 + "abc" + 15); //15abc15
System.out.println(a + 'a');//102
System.out.println(a + "" + 'a');//5a
System.out.println(a + 'a' + "it ");//102it
System.out.println("it" + a + 'a');//it5a
System.out.println("it" + (a + 'a'));//102it
}
}
注意:
- /?和?%?的區(qū)別:兩個(gè)數(shù)據(jù)做除法,/取結(jié)果的商,%取結(jié)果的余數(shù)。
- 整數(shù)操作只能得到整數(shù),要想得到小數(shù),必須有浮點(diǎn)數(shù)參與運(yùn)算。
自增自減運(yùn)算符
單獨(dú)使用
變量在單獨(dú)運(yùn)算的時(shí)候,變量前++和變量后++,變量的是一樣的;
- 變量前++ ? :例如 ++a?
- 變量后++ ? :例如 a++?
實(shí)例:
public class Demo04Test {
public static void main(String[] args) {
/*
單獨(dú)使用的時(shí)候, ++和-- 無論是放在變量的前邊還是后邊,結(jié)果是一樣的
*/
int a = 10;
++a; //等價(jià)于 a = a +1;
System.out.println(a); // 11
int b = 10;
--b; //等價(jià)于 b = b -1;
System.out.println(b); // 9
}
}
復(fù)合使用
和其他變量放在一起使用或者和輸出語句放在一起使用,前++和后++就產(chǎn)生了不同。
- 變量前++ :變量先自身加1,然后再取值
- 變量后++ :變量先取值,然后再自身加1
實(shí)例
/*
參與操作:
++在前: 先對(duì)該變量做自增(++)或者自減(--),然后再拿變量參與操作。
++在后: 先將該變量原本的值,取出來參與操作,隨后再進(jìn)行自增(++),自減(--)。
*/
public class Demo05Test {
public static void main(String[] args) {
// ++在前: 先對(duì)該變量做自增(++)或者自減(--),然后再拿變量參與操作。
int a = 10;
int b = ++a;
System.out.println(a); // 11
System.out.println(b); // 11
// ++在后: 先將該變量原本的值,取出來參與操作,隨后再進(jìn)行自增(++),自減(--)。
a = 10;
b = a++;
System.out.println(a); // 11
System.out.println(b); // 10
}
}
總結(jié):
- ++ 、-- 只能操作變量,不能操作字面量的。
- 最常見的用法:?jiǎn)为?dú)使用
賦值運(yùn)算符
賦值運(yùn)算符的作用是將一個(gè)表達(dá)式的值賦給左邊,左邊必須是可修改的,不能是常量。
/*
基本賦值運(yùn)算符:
= : 將符號(hào)右側(cè)的數(shù)據(jù), 賦值給左邊
*/
int a = 10; // 先看“=”右邊,把數(shù)據(jù)10賦值給左邊的變量a存儲(chǔ)
擴(kuò)展賦值運(yùn)算符
實(shí)例
public class Demo06 {
public static void main(String[] args) {
int a = 3;
int b = 4;
b += a;// 相當(dāng)于 b = b + a ;
System.out.println(a); // 3
System.out.println(b); // 7
short s = 3;
// s = s + 4; 代碼編譯報(bào)錯(cuò),因?yàn)閷nt類型的結(jié)果賦值給short類型的變量s時(shí),可能損失精度
s += 4; // 此行代碼沒有問題,隱含了強(qiáng)制類型轉(zhuǎn)換,相當(dāng)于 s = (short) (s + 3);
System.out.println(s); // 7
}
}
注意:擴(kuò)展的賦值運(yùn)算符隱含了強(qiáng)制類型轉(zhuǎn)換
關(guān)系運(yùn)算符
關(guān)系運(yùn)算符是對(duì)數(shù)據(jù)進(jìn)行條件判斷的符號(hào),最終會(huì)返回一個(gè)比較的布爾結(jié)果(false,true)
?實(shí)例
/*
關(guān)系運(yùn)算符(比較運(yùn)算符) 都有哪些呢?
> >= < <= == !=
*/
public class Demo{
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
System.out.println(a == b); // false
System.out.println(a != b); // true
}
}
注意事項(xiàng):
- 比較運(yùn)算符,是兩個(gè)數(shù)據(jù)之間進(jìn)行比較的運(yùn)算,運(yùn)算結(jié)果一定是boolean值true或者false?
- 其中>,<,>=,<=不支持boolean,String類型,==和!=支持boolean和String。
邏輯運(yùn)算符
邏輯運(yùn)算符把各個(gè)運(yùn)算的關(guān)系表達(dá)式連接起來組成一個(gè)復(fù)雜的邏輯表達(dá)式,以判斷程序中的表達(dá)式是否成立,判斷的結(jié)果是 true 或 false。
邏輯運(yùn)算符的特點(diǎn)
- 操作數(shù)都是布爾類型,并且最終的運(yùn)算結(jié)果也是布爾類型?
實(shí)例
/*
邏輯運(yùn)算符作用: 用于[整合]多個(gè)比較表達(dá)式的條件
1. 連接多個(gè)比較表達(dá)式
2. 連接true或false
最終得到的結(jié)果都是boolean類型的true或false.
*/
public class Demo {
/*
邏輯運(yùn)算符分類 :
&(與) : 并且, 遇false則false, 只有符號(hào)左右兩邊同時(shí)為true, 結(jié)果才為true.
|(或) : 或者, 遇true則true, 只有符號(hào)左邊兩邊同時(shí)為false, 結(jié)果才為false
!(非) : 取反
^(異或) : 相同為false, 不同為true.
*/
public static void main(String[] args) {
// &(與) : 并且
System.out.println(true & true); // true
System.out.println(false & false); // false
System.out.println(true & false); // false
System.out.println(false & true); // false
System.out.println("------------------");
// |(或) : 或者
System.out.println(true | true); // true
System.out.println(false | false); // false
System.out.println(true | false); // true
System.out.println(false | true); // true
System.out.println("------------------");
// !(非) : 取反
System.out.println(!true); // false
System.out.println(!!true); // true
System.out.println("------------------");
// ^(異或) :
System.out.println(true ^ true); // false
System.out.println(false ^ false); // false
System.out.println(true ^ false); // true
System.out.println(false ^ true); // true
}
}
短路邏輯運(yùn)算符?
&&和&區(qū)別:
- &&和&結(jié)果一樣,&&有短路效果,左邊為false,右邊不執(zhí)行;&左邊無論是什么,右邊都會(huì)執(zhí)行。
||和|區(qū)別:
- ||和|結(jié)果一樣,||有短路效果,左邊為true,右邊不執(zhí)行;|左邊無論是什么,右邊都會(huì)執(zhí)行。?
實(shí)例
/*
在邏輯與運(yùn)算中,只要有一個(gè)表達(dá)式的值為false,那么結(jié)果就可以判定為false了,
沒有必要將所有表達(dá)式的值都計(jì)算出來,短路與操作就有這樣的效果,可以提高效率。
同理在邏輯或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運(yùn)算。
*/
public class Demo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a > 100 && ++b > 10); // false
System.out.println(b); // 20
int i = 10;
int j = 20;
System.out.println(i > 2 || ++j > 10); // true
System.out.println(j); // 20
}
}
三元運(yùn)算符
語法格式:
執(zhí)行流程:
- 首先計(jì)算關(guān)系表達(dá)式的值
- 如果值為true, 取表達(dá)式1的值
- 如果值為false,取表達(dá)式2的值?
實(shí)例
public class Demo {
/*
聲明三個(gè)整型的變量,a,b,c,要求找出最大值
*/
public static void main(String[] args) {
// 1. 定義三個(gè)變量用于保存和尚的身高
int a = 150;
int b = 210;
int c = 165;
// 2. 用三元運(yùn)算符 , 比較前兩個(gè)變量,獲取較大值。
int tempMax = a > b ? a : b;
// 3. 用三元運(yùn)算符 , 讓較大值和第三個(gè)變量比較,獲取最大值。
int max = tempMax > c ? tempMax : c;
// 4. 輸出結(jié)果
System.out.println(max); // 210
}
}
位運(yùn)算符(了解)
- 位運(yùn)算符的運(yùn)算過程都是基于補(bǔ)碼運(yùn)算,但是看結(jié)果,我們得換成原碼,再換成十進(jìn)制看結(jié)果
- 從二進(jìn)制到十進(jìn)制都是基于原碼
- 正數(shù)的原碼反碼補(bǔ)碼都一樣,負(fù)數(shù)原碼反碼補(bǔ)碼不一樣
- byte,short,char在計(jì)算時(shí)按照int類型處理
- 如何區(qū)分&,|,^是邏輯運(yùn)算符還是位運(yùn)算符? 如果操作數(shù)是boolean類型,就是邏輯運(yùn)算符,如果操作數(shù)是整數(shù),那么就位運(yùn)算符
詳解:
- 左移:<<? 左移幾位就相當(dāng)于乘以2的幾次方
- 右移:>> 類似于除以2的n次,如果不能整除,向下取整
- 無符號(hào)右移:>>> 往右移動(dòng)后,左邊空出來的位直接補(bǔ)0,不看符號(hào)位
- 按位與:& 對(duì)應(yīng)位都是1才為1
- 按位或:| 對(duì)應(yīng)位只要有1即為1
- 按位異或:^ 對(duì)應(yīng)位一個(gè)為1一個(gè)為0,才為1
- 按位取反:~0就是1 ~1就是0
運(yùn)算符優(yōu)先級(jí)
在表達(dá)式中,哪個(gè)運(yùn)算符先執(zhí)行后執(zhí)行是要看優(yōu)先級(jí)的,例如 “*、/” 的優(yōu)先級(jí)高于”+、-” 。
實(shí)例
public class Demo {
public static void main(String[] args) {
// 目標(biāo):看看Java是否存在優(yōu)先級(jí),大家以后需要注意優(yōu)先級(jí)問題
System.out.println(10 > 3 || 10 > 3 && 10 < 3); //true
System.out.println( (10 > 3 || 10 > 3 ) && 10 < 3); // false
}
}
tips?文章來源地址http://www.zghlxwxcb.cn/news/detail-804994.html
- 表達(dá)式不要太復(fù)雜,如果不能確定優(yōu)先級(jí)先算的使用小括號(hào)
到了這里,關(guān)于day04_java中的運(yùn)算符的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!