java 三元操作符用法說明
由?:符號表示的,具體的含義其實就和if-else結(jié)構(gòu)的含義差不多,這種運算符會將某個條件作兩種處理,如果滿足條件的話就執(zhí)行第一個結(jié)果,如果不滿足的話就執(zhí)行另外一個結(jié)果,例如:
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
這條語句的意思是,如果A>B的話,就將100賦給C,否則就將200賦給C;
一、比較運算符
又叫關(guān)系運算符,用于判斷兩個被操作數(shù)的大小及是否相等的關(guān)系。使用比較運算符其返回結(jié)果一定為布爾值。
運算符 |
運算規(guī)則 |
范例 |
結(jié)果 |
== |
相等于 |
4==3 |
false |
!= |
不等于 |
4!=3 |
true |
< |
小于 |
4<3 |
false |
> |
大于 |
4>3 |
true |
<= |
小于等于 |
4<=3 |
false |
>= |
大于等于 |
4>=3 |
true |
二、邏輯運算符
用于計算兩個布爾值經(jīng)過指定邏輯后的運算結(jié)果,每個邏輯運算符都是一種邏輯運算規(guī)則。邏輯是在中學(xué)數(shù)學(xué)中學(xué)習(xí)的概念,是判斷是非關(guān)系的運算。
所以邏輯運算符操作的均為布爾值:true與false
運算符 |
運算規(guī)則 |
范例 |
結(jié)果 |
& |
與 |
false&true |
false |
| |
或 |
false|true |
true |
^ |
異或 |
true^flase |
true |
! |
非 |
!true |
flase |
&& |
短路與 |
false&&true |
false |
|| |
短路或 |
false||true |
true |
邏輯運算符通常連接兩個其他表達式計算后的布爾值結(jié)果
&&和&以及||和|的區(qū)別:當(dāng)使用短路與或者短路或時,只要能判斷出結(jié)果則后邊的部分就不再判斷。
三、三元運算符
用來完成簡單的選擇邏輯,即根據(jù)條件判斷,從兩個選擇中選擇一種執(zhí)行。
使用格式:
(條件表達式)?表達式1:表達式2;
運算規(guī)則:
a) 判斷條件表達式,結(jié)果為一個布爾值。
b) true,運算結(jié)果為表達式1
c) false,運算結(jié)果為表達式2
如:
int a = 10; int b = 20;
a==b?10:20; 結(jié)果為20
首先看一下三元運算符的格式
[條件語句] ? [表達式1] : [表達式2]
其中如條件語句為真執(zhí)行表達式1,否則執(zhí)行表達式2.簡單的例子就不舉了,來點其它的。在JDK1.5以前的版本中,表達式1和表達式2都要求是相同的類型,比如都是String或者char之類的,在JDK1.5以后,有了自動拆箱和裝箱的原因,兩者只要其中一種或者兩者都能被拆箱即可,比如表達式1為Integer,而表達式2為int類型的,比如如下
int a = 1; Integer b = 2; boolean c = ture; int d = c ? b : a;
還有個需要注意的是,如果表達式1和表達式2的類型不相同,那么他們需要對交集類型的自動參考轉(zhuǎn)換。例如如下這段代碼
String str = "abc"; StringBuilder strbu = new StringBuilder("def"); boolean boo = true; CharSequence cs = boo ? str : strbu;
因為String和StringBuilder都實現(xiàn)了CharSequence這個接口。
確定條件表達式結(jié)果類型的規(guī)則的核心是以下3點:
1 如果表達式1和表達式2操作數(shù)具有相同的類型,那么它就是條件表達式的類型。
2 如果一個表達式的類型是byte、short、char類型的,而另外一個是int類型的常量表達式,且它的值可以用類型byte、short、char三者之一表示的,那么條件表達式的類型就是三者之一
3 否則,將對操作數(shù)類型進行二進制數(shù)字提升,而條件表達式的類型就是第二個和第三個操作數(shù)被提升之后的類型
以上的三點可以用如下的代碼來幫助理解:
char ch = 'a'; int num = 0 ; boolean bool = true; System.out.print( bool ? ch : 0); //這里不是 bool ? ch : num ,那樣會打印兩個97 System.out.print( !bool ? num : ch);
這段代碼打印的是 a97 。
很顯然,第二點的規(guī)則應(yīng)用到第一個打印上了,返回的是char,第三點的規(guī)則應(yīng)用到第二個打印上了,返回的是int 。但是誰會在乎這個順序?qū)е碌拇蛴〗Y(jié)果,所以為了避免不必要的麻煩,很顯然顯式強制類型轉(zhuǎn)換是個很不錯的選擇 -_-
char ch = 'a'; int num = 0 ; boolean bool = true; System.out.print( bool ? (char)ch : (char)0); System.out.print( !bool ? (int)num : (int)ch);
還有值得注意的是 表達式1 和 表達式2 不一定非得是數(shù)據(jù)類型,還可以是自己定義的方法,只要方法有返回值就行。例如
static int test1(int i) { i += 1; return i; } static int test2(int i) { i += 2; return i; } public static void ternary() { boolean boo = false; int c = boo ? test1(1) : test2(2); }
以上就是個人的一點小心得,希望大家多多支持腳本之家~~有些內(nèi)容可以參考條件表達式規(guī)范[JLS 15.25]
相關(guān)文章
Java常用鎖synchronized和ReentrantLock的區(qū)別
這篇文章主要介紹了Java常用鎖synchronized和ReentrantLock的區(qū)別,二者的功效都是相同的,但又有很多不同點,下面我們就進入文章了解具體的相關(guān)內(nèi)容吧。需要的小伙伴也可以參考一下2022-05-05java+io+swing實現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細介紹了java+io+swing實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07解讀@Bean和@Autowired、@Resource之間的區(qū)別
這篇文章主要介紹了@Bean和@Autowired、@Resource之間的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03java獲取和設(shè)置系統(tǒng)變量問題(環(huán)境變量)
這篇文章主要介紹了java獲取和設(shè)置系統(tǒng)變量問題(環(huán)境變量),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Java編程實現(xiàn)深度優(yōu)先遍歷與連通分量代碼示例
這篇文章主要介紹了Java編程實現(xiàn)深度優(yōu)先遍歷與連通分量代碼示例,2017-11-11