摘要:語言中給我們提供了專門用來操作這些數(shù)據(jù)的代碼符號,統(tǒng)稱為運算符。運算符的優(yōu)先級運算符優(yōu)先級決定一個表達式里術(shù)語的分組。一定的運算符比其他運算符擁有更高的優(yōu)先級。
在前面的內(nèi)容已經(jīng)學會了如何定義變量和初始化變量。定義變量的目的就是為了操作數(shù)據(jù)。Java 語言中給我們提供了專門用來操作這些數(shù)據(jù)的代碼符號,統(tǒng)稱為“運算符”。
按照操作符的用法,我們可以分為以下幾類:
算術(shù)運算符
賦值運算符
自增和自減運算符
邏輯運算符
關(guān)系運算符
位運算符
不用擔心,它們就是些符號而已,幫我們處理操作數(shù)據(jù)的。下面用代碼實例,一一來說明這些運算符的用法。
1. 算術(shù)運算符算術(shù)運算符,就是針對數(shù)值變量的加、減、乘、除、取余的算術(shù)操作:
加 :+
減:-
乘:*
除:/
取余:%
public class OperatorsDemo { public static void main(String[] args) { int num1 = 100; int num2 = 20; //加 System.out.println("num1 + num2: " + (num1 + num2) ); //減 System.out.println("num1 - num2: " + (num1 - num2) ); //乘 System.out.println("num1 * num2: " + (num1 * num2) ); //除 System.out.println("num1 / num2: " + (num1 / num2) ); //取余 System.out.println("num1 % num2: " + (num1 % num2) ); } }
輸出結(jié)果:
num1 + num2: 120 num1 - num2: 80 num1 * num2: 2000 num1 / num2: 5 num1 % num2: 02. 賦值運算符
與大部分編程語言相同,Java使用"="運算符來進行賦值操作。這種操作會將右邊的計算結(jié)果(稱為右值)賦給左邊的變量。Java 中賦值運算符有:
= (num2 = num1 )
+= (num2 += num1 等價 num2 = num2 + num1)
-= (num2 -= num1 等價 num2 = num2 - num1)
*= (num2 *= num1 等價 num2 = num2 * num1)
/= (num2 /= num1 等價 num2 = num2 / num1)
%= (num2 %= num1 等價 num2 = num2 % num1)
public class OperatorsDemo { public static void main(String[] args) { int num1 = 10; int num2 = 20; num2 = num1; System.out.println("= Output: "+num2); num2 += num1; System.out.println("+= Output: "+num2); num2 -= num1; System.out.println("-= Output: "+num2); num2 *= num1; System.out.println("*= Output: "+num2); num2 /= num1; System.out.println("/= Output: "+num2); num2 %= num1; System.out.println("%= Output: "+num2); } }
結(jié)果輸出:
= Output: 10 += Output: 20 -= Output: 10 *= Output: 100 /= Output: 10 %= Output: 03. 自增和自減運算符
自增和自減運算符,只操作一個變量,是變量的值發(fā)生改變。
num++ (等價 num = num + 1)自增,主要針對數(shù)值變量,使自身變量的值加1。
num—(等價 num = num -1)自減,主要針對數(shù)值變量,使身變量的值減去1。
public class OperatorsDemo { public static void main(String[] args) { int num1=100; int num2=200; num1++; num2--; System.out.println("num1++ is: "+num1); System.out.println("num2-- is: "+num2); } }
結(jié)果輸出:
num1++ is: 101 num2-- is: 1994. 邏輯運算符
邏輯運算符,顧名思義用于邏輯判斷,運算的結(jié)果為boolean 類型的值,即 true 或者 false。邏輯勻運算符有
邏輯運算符 | 邏輯關(guān)系 | ||
---|---|---|---|
&& | 與 | ||
` | ` | 或 | |
! | 非 |
b1 && b2:如果b1和b2都為真,b1 && b2將返回true,否則返回false
b1 || b2:如果b1和b2都是假,將返回false,否則返回true。
!b1:將返回與b1相反的值,如果b1為false,則返回true;如果b1為true,則返回false
public class OperatorsDemo { public static void main(String[] args) { boolean b1 = true; boolean b2 = false; System.out.println("b1 && b2: " + (b1&&b2)); System.out.println("b1 || b2: " + (b1||b2)); System.out.println("!(b1 && b2): " + !(b1&&b2)); } }
輸出結(jié)果:
b1 && b2: false b1 || b2: true !(b1 && b2): true
邏輯短路:
在Java中,邏輯運算符支持短路操作,一旦能夠明確表達整個表達式的值,我們就不需要計算表達式的余下部分了。比如我們需要判斷一個對象不為空且它的某個方法返回值不為空,我們就可以這樣判斷:
if (object != null && object.someFunction() != null) { // do something. }
如果object為空,第一部分表達式object != null會返回false,那么不管&&運算符后面的表達式object.someFunction() != null的結(jié)果如何,最終的值都為false。編譯器會自動將這部分運算進行優(yōu)化,不會執(zhí)行object.someFunction() != null。
5. 關(guān)系運算符用來比較兩個變量數(shù)據(jù)的大小,返回boolean的值,即 true 或者 false
關(guān)系操作符包括:
關(guān)系運算符 | 關(guān)系 |
---|---|
> | 大于 |
< | 小于 |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
"=="和"!="適用于所有類型的值和對象(即基本類型變量和引用類型變量)。
">"、"<"、">="和"<="不適用于布爾類型的值,因為它們只有true或false,大于和小于并無實際意義。
public class OperatorsDemo { public static void main(String[] args) { int num1 = 10; int num2 = 50; if (num1==num2) { System.out.println("num1 and num2 are equal"); } else{ System.out.println("num1 and num2 are not equal"); } if( num1 != num2 ){ System.out.println("num1 and num2 are not equal"); } else{ System.out.println("num1 and num2 are equal"); } if( num1 > num2 ){ System.out.println("num1 is greater than num2"); } else{ System.out.println("num1 is not greater than num2"); } if( num1 >= num2 ){ System.out.println("num1 is greater than or equal to num2"); } else{ System.out.println("num1 is less than num2"); } if( num1 < num2 ){ System.out.println("num1 is less than num2"); } else{ System.out.println("num1 is not less than num2"); } if( num1 <= num2){ System.out.println("num1 is less than or equal to num2"); } else{ System.out.println("num1 is greater than num2"); } } }
輸出結(jié)果:
num1 and num2 are not equal num1 and num2 are not equal num1 is not greater than num2 num1 is less than num2 num1 is less than num2 num1 is less than or equal to num26. 位運算符
位運算符面向的運算對象是二進制的“位”,可應(yīng)用于整數(shù)類型(int),長整型(long),短整型(short),字符型(char),和字節(jié)型(byte)等類型,運算時會將其對應(yīng)Bit位(0或者是1)進行布爾代數(shù)運算或者移動操作。
位運算符 | 計算邏輯 | |
---|---|---|
& | 與運算:對于某一位,只要兩個操作數(shù)都為1,則該位的結(jié)果為1,否則為0 | |
` | ` | 或運算:對于某一位,只要兩個操作數(shù)有一個為1,則該位的結(jié)果為1,否則為0 |
^ | 異或運算:對于某一位,如果兩個操作數(shù)不相同,則該位的結(jié)果為1,否則為0 | |
~ | 非運算:按位補運算符翻轉(zhuǎn)操作數(shù)的每一位 | |
<< | 二進制左移運算符:左操作數(shù)按位左移右操作數(shù)指定的位數(shù) | |
>> | 二進制右移運算符:左操作數(shù)按位右移右操作數(shù)指定的位數(shù) | |
>>> | 二進制右移補零操作符:左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移,移動得到的空位以零填充 |
計算邏輯的描述讀起來有些晦澀,我們通過例子可以更清晰得了解位運算符如何進行計算。假設(shè)如果x等于60;y等于13;則它們的二進制表示,以及位運算的結(jié)果如下所示:
x = 0011 1100 y = 0000 1101 ----------------- x & y = 0000 1100 x | y = 0011 1101 x ^ y = 0011 0001 ~x = 1100 0011 x << 2 = 1111 0000 x >> 2 = 0000 1111 x >>> 2 = 0000 1111
注意>>和>>>的區(qū)別:
右移位運算符>>,若操作的值為正,則在高位插入0;若值為負,則在高位插入1;
右移補零操作符>>>,無論正負,都在高位插入0。
位運算不理解,先跳過。實際用到的時候,可以再去研究。7. 運算符的優(yōu)先級
運算符優(yōu)先級決定一個表達式里術(shù)語的分組。它影響著一個表達式如何求值。一定的運算符比其他運算符擁有更高的優(yōu)先級。
例如:乘法運算符比加法運算符有更高的優(yōu)先級,表達式1 + 5 * 6,根據(jù)運算符的優(yōu)先級,編譯器會先計算5 * 6,再計算30 + 1,最終得到結(jié)果31。
各類各運算符的優(yōu)先級從大到小如下:
., (), []
單目+(右到左結(jié)合), 單目-(右到左結(jié)合), ++, --, ~, !
*, /,%
+(左到右結(jié)合), -(左到右結(jié)合)
>>, <<, >>>
<, <=, >, >=
==, !=
&
|
^
&&
||
?:
=, +=等賦值運算符
不用擔心這么復(fù)雜的優(yōu)先級列表,絕大多數(shù)情況下,表達式本身就很容易看得出優(yōu)先級,比如賦值運算肯定是優(yōu)先級最低的。在對優(yōu)先級不太明確的情況下,我們使用括號就能按照我們希望的方式來改變優(yōu)先級,所以不需要對運算符優(yōu)先級做太多記憶。
8.其他運算符三運運算符:
Java中的條件運算符是一個三元運算符,它的形式如下:
booleanExpression ? valueWhenTrue : valueWhenFalse
如果布爾表達式值為true,則表達式的值為valueWhenTrue的值,否則為valueWhenFalse的值。
比如我們要計算x的絕對值,可以通過如下代碼實現(xiàn):
if (x >= 0) { y = x; } else { y = -x; }
通過三元運算符,只需要一條語句y = x >= 0 ? x : -x;就可以完成,更為簡潔。
類型轉(zhuǎn)換運算符:
我們在很多情況下會用到類型轉(zhuǎn)換。在適當?shù)臅r候,Java也會根據(jù)數(shù)據(jù)類型將數(shù)據(jù)類型自動轉(zhuǎn)為另一種。比如我們?yōu)?b>float變量賦一個整數(shù)值,編譯器會將int轉(zhuǎn)化為float賦給變量。
但是在很多情況下,Java并不能判斷我們是否需要進行類型轉(zhuǎn)換,這時就需要類型轉(zhuǎn)化運算符,它允許我們顯式地進行類型轉(zhuǎn)換,如:
int a = 10; long b = (long) a; long c = (long) 100;
我們對變量和常量都能進行類型轉(zhuǎn)換。
在對浮點數(shù)進行類型轉(zhuǎn)換時,我們需要注意截尾的問題。如我們要將10.9進行類型轉(zhuǎn)換:(int) 10.9,它的值并不是四舍五入的11,而是10。
這些都是一些 Java 中的規(guī)則,盡量去熟練掌握,多用代碼去實際實驗一下,練習幾遍,不要死記硬背。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68347.html
摘要:注意當多個父接口中存在相同的默認方法時,子類中以就近原則繼承。定義靜態(tài)默認方法這是版簡易計算器接口默認方法使用定義接口并提供默認打印方法定義接口默認方法支持方法形參這是數(shù)值運算基本接口。。。 總概 JAVA8 已經(jīng)發(fā)布很久,而且毫無疑問,java8是自java5(2004年發(fā)布)之后的最重要的版本。其中包括語言、編譯器、庫、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...
摘要:這個工具功能非常強大,體驗很好,支持幾種開發(fā)語言,而且支持前端開發(fā),目前行業(yè)內(nèi)使用度很高的一個開發(fā)工具。用開始一個項目破解之后,現(xiàn)在使用開始一個簡單的項目。 showImg(https://segmentfault.com/img/bV1APX?w=900&h=500);第一個 Java 程序 Hello World 文章中,介紹了如何編寫一個簡單的 Java 程序,以及如何手動去編譯...
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:程序執(zhí)行的過程,我們可以把它認為是一個流,實際的業(yè)務(wù)需求會根據(jù)不同的情況,來控制程序不同的流轉(zhuǎn)。中對應(yīng)的結(jié)構(gòu)為控制結(jié)構(gòu)。程序跳轉(zhuǎn)到語句后面的語句執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000012984073?w=900&h=500); 程序執(zhí)行的過程,我們可以把它認為是一個流,實際的業(yè)務(wù)需求會根據(jù)不同的情況,來控制程序不...
閱讀 1833·2021-09-22 15:23
閱讀 3255·2021-09-04 16:45
閱讀 1842·2021-07-29 14:49
閱讀 2767·2019-08-30 15:44
閱讀 1523·2019-08-29 16:36
閱讀 1038·2019-08-29 11:03
閱讀 1504·2019-08-26 13:53
閱讀 504·2019-08-26 11:57