判斷 java.lang.String、java.lang.Boolean 與 java.lang.Object 任意組合物件呼叫 equals(Object) 方法的結果。
equals 方法執行的是「深層比較」,比較物件所指向的實際值;而 == 運算子執行「淺層比較」,比較的是參考位址(若 Java 有指標的話)。無論 String 物件以何種方式建立,equals 都會進行逐字元比較。
在已知運算元值的運算式中,判斷 &、|、&&、|| 這些運算子會評估哪些運算元,以及整個運算式的結果。
釐清將變數傳入方法並在方法內進行指派或其他修改操作時,對物件與基本型別值的影響。
適用情境:
+ 和 - 的運算元~ 的運算元new int[x]),x 必須評估為 inttable['a']),索引必須評估為 int適用情境:
*、/、%、+、- 的運算元<、<=、>、>= 的運算元== 和 != 的數值運算元&、^、| 的整數運算元boolean 不能與任何非布林型別互相轉換byte、short 不能與 char 互相轉換byte、short、char,轉為 int;否則不轉換double 則全部轉 double;否則有 float 轉 float;否則有 long 轉 long;否則全部轉 intfinal 變數指派時,若值可在編譯期確定且在範圍內,允許隱性窄化轉換byte → short → int → long → float → doublechar 獨立分支boolean 轉型為其他型別,或反之Object 參考,但不可轉為 Object[]編譯期規則:
final 類別之間總是可以強制轉型執行期規則:
Object 參考可轉為:Object、Cloneable(需轉型)、任意類別(需轉型)、任意陣列(需轉型)、任意介面(需轉型)Object)、子類別(需轉型)、實作的介面、任意介面(需轉型,final 且未實作該介面除外)Object、父介面、任意介面/類別(需轉型,final 且未實作該介面除外)Object、Cloneable、相同型別陣列Object、Cloneable、父類別陣列(含 Object[])、子類別陣列(需轉型)class Superclass { }
class Subclass1 extends Superclass { }
Superclass a = new Superclass();
Subclass1 b = new Subclass1();
b = (Subclass1)a; // 結果為何?
正確答案:b) 編譯合法,但執行期可能拋出 ClassCastException。編譯器允許向下轉型,但執行時 a 實際指向 Superclass 實例,非 Subclass1,故拋出異常。