scjp考试准备 - 2 - 逻辑运算及类型转换
判斷如下代碼的執行結果:
public class Spock{public static void main(String[] args){Long tail = 2000L;Long distance = 1999L;Long story = 1000L;if( (tail>distance) ^ ((story*2)==tail ) )System.out.print("1");if((distance+1 !=tail) ^ ((story*2)==distance) )System.out.print("2");} }?
這道題考察的是邏輯運算及條件判斷,同時以基本類型的包裝類和自動類型轉換做煙幕。
Java中的邏輯運算符有6個,三個比較常見的與(&&)、或(||)、非(!);三個用的比較少的不短路與(&)、不短路或(|)、異或(^)。
著重理解下后三個:
不短路與(&):和短路與(&&)功能相同。不同處在于短路與(&&)在判斷第一個表達式錯誤后就不會計算其余的表達式,不短路與(&)總是會計算所有的表達式;
不短路或(|):和短路或(||)功能相同。不同處在于短路或(||)在判斷第一個表達式正確后就不會計算其余的表達式,不短路或(|)總是會計算所有的表達式;
異或(^):兩個表達式相同返回false;表達式不同返回true(這家伙唯恐天下不亂)。
此外這三個還是位運算符(不詳說)。
?
基本類型的包裝類。這里使用了包裝類的自動裝箱和自動拆箱功能。自動裝箱是指可以把一個基本類型的變量直接賦給對應包裝類的變量,或者賦給Object變量;自動拆箱則與之相反,可以把包裝類的變量賦給對應基本類型的變量。自動拆箱和自動裝箱功能是在JDK1.5之后出現的。
?
基本類型的自動轉換遵循如下規則:
在一個算術表達式中,如果有多個不同基本數據類型的值,那么表達式的值會自動提升到表達式中最高等級數值的類型。
?
自動裝箱時類型不會自動轉換;自動拆箱時會執行自動轉換(實際上是先拆箱再自動轉換)。
?
說了這許多,再看看這題——簡單的加減乘除好吧。
第一個條件判斷全為true,第二個條件判斷全為false,最后什么也不會輸出。
so,心思還是單純點比較好
轉載于:https://www.cnblogs.com/amunote/p/3796410.html
總結
以上是生活随笔為你收集整理的scjp考试准备 - 2 - 逻辑运算及类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos2d-X内存管理研究一
- 下一篇: Openvswitch手册(5): VL