一篇文章讓你弄懂Java運(yùn)算符
1. 運(yùn)算符是什么?
1.1 定義:
- 對(duì)常量和變量進(jìn)行運(yùn)算操作的符號(hào)
- 程序?qū)?shù)據(jù)進(jìn)行運(yùn)算時(shí)要用運(yùn)算符
1.2 常見運(yùn)算符的概述

1.3 表達(dá)式
1.3.1 定義
用運(yùn)算符把常量或變量連接起來的式子
1.3.2 表達(dá)式的類型
表達(dá)式的類型為表達(dá)式運(yùn)算結(jié)果的數(shù)據(jù)類型
2. 算數(shù)運(yùn)算符
2.1 分類:

2.2 基本四則運(yùn)算符:加減乘除模(+ - * / %)
注意事項(xiàng):
/ :除法運(yùn)算符,得到兩個(gè)數(shù)據(jù)相除的商。
特點(diǎn):Java中整數(shù)除以整數(shù)結(jié)果還是整數(shù)。
%:取模(取余)運(yùn)算,得到兩個(gè)數(shù)據(jù)相除的余數(shù)。
特點(diǎn):可以用來判斷兩個(gè)數(shù)是否能夠整除。
應(yīng)用:
public class ArithmeticOperators {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
}
}運(yùn)行結(jié)果如下:

在Java中,小數(shù)也可以進(jìn)行取模操作
public class ArithmeticOperators {
public static void main(String[] args) {
System.out.println(10%3);
System.out.println(12.5%2);
System.out.println(12.5%2.0);
}
}
易錯(cuò)點(diǎn)1:除數(shù)不能為0
public class ArithmeticOperators {
public static void main(String[] args) {
int a = 10;
int b = 0;
System.out.println(a/b);
}
}會(huì)報(bào)錯(cuò)! Java里面,把程序在編譯/運(yùn)行的過程當(dāng)中 產(chǎn)?的不正常的?為 叫做異常,圖片里面的就是算術(shù)異常

易錯(cuò)點(diǎn)2:在java中,負(fù)數(shù)也是可以參與取模運(yùn)算的
public class ArithmeticOperators {
public static void main(String[] args) {
System.out.println(10%3);//1
System.out.println(10%-3);//1
System.out.println(-10%3);//-1
System.out.println(-10%-3);//-1
}
}具體計(jì)算步驟(小學(xué)計(jì)算也很容易出錯(cuò)熬):

2.3 增量運(yùn)算符(+= -= *= %=…)
該種類型運(yùn)算符操作完成后,會(huì)將操縱的結(jié)果賦值給左操作數(shù)。
public class IncOpr {
public static void main(String[] args) {
int a = 1;
a += 2;
System.out.println(a);
a -= 1;
System.out.println(a);
a *= 3;
System.out.println(a);
a /= 3;
System.out.println(a);
a %= 3;
System.out.println(a);
}
}

增量運(yùn)算符會(huì)自動(dòng)幫我們進(jìn)行數(shù)據(jù)轉(zhuǎn)換
public class IncOpr {
public static void main(String[] args) {
int a = 99;
short s = 0;
//s = s + a;//err:報(bào)錯(cuò),short+int->int+int=>int,用short裝不下,需要強(qiáng)轉(zhuǎn)
//正確寫法1:
//s = (short)(s + a);
//正確寫法2:
s += a;//+=會(huì)自動(dòng)幫我們進(jìn)行類型轉(zhuǎn)換
System.out.println(a);//99
}
}

2.4 自增/自減運(yùn)算符(++,–)
++:自增1
– :自減1
- 單獨(dú)使用:放在變量前或后結(jié)果一樣
- 參與運(yùn)算:
- 在變量前,先自增(自減) ,再進(jìn)行其它運(yùn)算
- 在變量后,先以原值進(jìn)行其它運(yùn)算,再自增(自減)
舉個(gè)栗子:
public class IncrementdecrementOpr {
public static void main(String[] args) {
int a = 10;
int b = ++a;//a=a+1;b=a;->b=11 a=11
int c = a++;//b=a;a=a+1;->b=10 a=11;
System.out.println(b);
}
}3. 關(guān)系運(yùn)算符
常見關(guān)系運(yùn)算符

關(guān)系運(yùn)算符的運(yùn)算結(jié)果都是布爾(boolean)類型,要么是true,要么是false
public class RelationalOpr {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a>=b);
System.out.println(a<=b);
}
}
結(jié)果如下:

注意:當(dāng)需要多次判斷時(shí),不能連著寫,比如:3<a<5 ,程序與數(shù)學(xué)中是有區(qū)別的
4. 邏輯運(yùn)算符
定義:用于判斷“并且”、“或者”、“除非”等邏輯關(guān)系。邏輯運(yùn)算符兩端一般連接值為布爾類型的關(guān)系表達(dá)式
4.1 &&:邏輯與,并且
也稱短路與
布爾表達(dá)式1 && 布爾表達(dá)式2:兩個(gè)表達(dá)式都為真的時(shí)候,整個(gè)表達(dá)式才是真
- 只要有?個(gè)是假,那整個(gè)表達(dá)式就是假
- 第?個(gè)表達(dá)式為假,后?不執(zhí)?
舉個(gè)栗子:
public class LogOperators {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2);
System.out.println(a == 1 && b > 100);
System.out.println(a > 100 && b == 2);
System.out.println(a > 100 && b > 100);
}
}

4.2 ||:邏輯或,或者
布爾表達(dá)式1 || 布爾表達(dá)式2:只要有?個(gè)是真,整個(gè)表達(dá)式就是真
- 布爾表達(dá)式1為真,不執(zhí)?布爾表達(dá)式2
- 布爾表達(dá)式1為假,會(huì)繼續(xù)布爾表達(dá)式2
舉個(gè)栗子:
public class LogOperators {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2);
System.out.println(a == 1 || b > 100);
System.out.println(a > 100 || b == 2);
System.out.println(a > 100 || b > 100);
}
}
4.3 !:邏輯非,表示否定
語法規(guī)則:!表達(dá)式
真變假,假變真。
舉個(gè)栗子:
public class LogOperators {
public static void main(String[] args) {
int a = 1;
System.out.println(!(a==1));
System.out.println(!(a!=1));
}
}
4.4 短路求值
&&和||遵循短路求值的規(guī)則
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
我們都知道,計(jì)算10 / 0會(huì)導(dǎo)致程序拋出異常.但是上面的代碼卻能正常運(yùn)行,說明10 / 0并沒有真正被求值.
&和|如果表達(dá)式結(jié)果為boolean時(shí),也表示邏輯運(yùn)算.但與&& ||相比,它們不支持短路求值.
System.out.println(10 > 20 & 10 / 0 == 0); // 程序拋出異常 System.out.println(10 < 20 | 10 / 0 == 0); // 程序拋出異常
5. 位操作符
如果位操作符,左右兩邊不是布爾表達(dá)式,那么他就代表位運(yùn)算,且位運(yùn)算操作的是二進(jìn)制位
5.1 按位與&
對(duì)應(yīng)位上有0就是0,對(duì)應(yīng)位都是1的時(shí)候,這?位運(yùn)算下來的結(jié)果就是1

5.2 按位或|
對(duì)應(yīng)位上有1,就是1

5.3 按位異或
不?樣的位上進(jìn)?或,?樣的位上是0
推論:哪?位上是1,那么這?位置上就不同

5.4 按位取反~
0變1,1變0

int a = 0x0000000f;
System.out.printf("%x\n", ~a);//fffffff0
?六進(jìn)制:1 2 3 4 5 6 7 8 9 A B C D E F
0000 0000 0000 0000 0000 0000 0000 1111
1111 1111 1111 1111 1111 1111 1111 0000 ~
f f f f f f f 0
6. 移位運(yùn)算
移動(dòng)的是二進(jìn)制位
6.1 左移<<
最左側(cè)位不要了,最右側(cè)補(bǔ)0
用法舉例:
public class shftOperation {
public static void main(String[] args) {
int a = 0x10;
System.out.printf("%x\n",a << 1);
}
}
6.2 右移>>
最右側(cè)位不要了,最左側(cè)補(bǔ)符號(hào)位(正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1)
用法舉例:
public class shftOperation {
public static void main(String[] args) {
int a = 0x10;
System.out.printf("%x\n",a >> 1);
}
}
注意:沒有?符號(hào)數(shù)左移,因?yàn)榈?位是符號(hào)位,移的話把符號(hào)位移?了
6.3 無符號(hào)右移>>>
最右側(cè)位不要了,最左側(cè)補(bǔ)0
用法舉例:
public class shftOperation {
public static void main(String[] args) {
int a = 0xffffffff;
System.out.printf("%x\n",a >>> 1);//7fffffff
}
}7. 條件運(yùn)算符
語法格式:表達(dá)式1?表達(dá)式2:表達(dá)式3
如果表達(dá)式1為真,執(zhí)?表達(dá)式2,否則執(zhí)?表達(dá)式3
要么返回表達(dá)式2的結(jié)果,要么返回表達(dá)式3的結(jié)果,所以需要變量來接收
注意:表達(dá)式1必須是一個(gè)布爾表達(dá)式
用法舉例:
public class CondOpr {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a>b?a:b;
System.out.println(c);//20
}
}8.運(yùn)算符的優(yōu)先級(jí)
就一句話:不確定的話,就加括號(hào)!
在Java中,對(duì)于運(yùn)算符的優(yōu)先級(jí)考察不多,不像C語言那樣。
到此,對(duì)于Java中運(yùn)算符的講解已經(jīng)完畢。
運(yùn)算符之間是有優(yōu)先級(jí)的. 具體的規(guī)則我們不必記憶. 在可能存在歧義的代碼中加上括號(hào)即可
public class Swap {
? ? public static void main(String[] args) {
? ? ? ? System.out.println(3*4+1);
? ? ? ? System.out.println(3*(4+1));
? ? }
}到此這篇關(guān)于Java運(yùn)算符的文章就介紹到這了,更多相關(guān)Java運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式之原型模式詳細(xì)解讀
這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳細(xì)解讀,原型模式屬于創(chuàng)建型設(shè)計(jì)模式,用于創(chuàng)建重復(fù)的對(duì)象,且同時(shí)又保證了性能,該設(shè)計(jì)模式的好處是將對(duì)象的創(chuàng)建與調(diào)用方分離,需要的朋友可以參考下2023-12-12
Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼,代碼注釋很詳細(xì),在這里分給大家,需要的朋友可以參考下。2017-09-09
關(guān)于阿里巴巴TransmittableThreadLocal使用解讀
文章主要介紹了三種ThreadLocal的使用:ThreadLocal、InheritableThreadLocal和TransmittableThreadLocal,ThreadLocal和InheritableThreadLocal在單線程和部分情況下可以正常工作,但TransmittableThreadLocal在處理線程池時(shí)表現(xiàn)更佳2025-02-02
SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件
這篇文章主要介紹了SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot使用GraphQL開發(fā)Web API實(shí)現(xiàn)方案示例講解
這篇文章主要介紹了SpringBoot使用GraphQL開發(fā)Web API實(shí)現(xiàn)方案,GraphQL是一個(gè)從服務(wù)端檢數(shù)據(jù)的查詢語言。某種程度上,是REST、SOAP、或者gRPC的替代品2023-04-04
基于Spring + Spring MVC + Mybatis 高性能web構(gòu)建實(shí)例詳解
這篇文章主要介紹了基于Spring + Spring MVC + Mybatis 高性能web構(gòu)建實(shí)例詳解,需要的朋友可以參考下2017-04-04

