==比較的是兩個基本資料型別的值是否相等,或者兩個物件的引用位址是否一樣。
如下**:
public static void main(string args)
執行的結果為:true false true
原因:(1)a和b都是基本資料型別,值也相等,所以 a==b 為true
(2)integer c = 1000 是將乙個基本資料型別的值賦給物件的引用。這裡涉及到了裝箱的概念,
就是把把基本型別用它們相應的引用型別包裝起來,使其具有物件的性質。
編譯器用的是public static integer valueof(int i)方法。
來看下它的原始碼:
public static integer valueof(int i)
return new integer(i);
}
當i的值在[-128,127]之間時,返回的是integercache快取的物件的已用,否則返回的是新的物件的引用。
因此,c 和 d 是兩個不同的物件, e 和 f 是兩個相同的物件。
通過除錯也可以看到他們的id值也說明了這一點。
所以,c==d 為 false ,e==f 為 true。
equals比較的是兩個物件是否相等。由於每個類都是使用object作為超類的,所以所有物件(包括陣列)也實現這個類方法。
對於object類的equals方法源**如下:
public boolean equals(object obj)
可以看到它呼叫的就是 == 比較運算子。因此下面的**結果就很容易看出為false了。
public static void main(string args)
可是有時候會有特例出現,例如如下**:
public static void main(string args)
執行的結構為: true true
原來string類重寫了equals方法。我們來看一下原始碼:
public boolean equals(object anobject)
if (anobject instanceof string)
return true;}}
return false;
}
如果比較的是物件,就直接用==比較運算子。
如果比較的是string物件的例項,就比較這兩個string的值是否相等。因此結果就都是true了。
5 算術運算子和比較運算子
select product name,sale price,sale price 2 as sale price x2 from product 運算是以行為單位執行的 法則2 6 select子句中可以使用常數或者表示式 所有包含null的計算,結果肯定是null 通常情況下,類似5 0這樣除數...
js 算術運算子和比較運算子
自增1 自減單獨使用的 字首和字尾都是自增自減,沒有什麼特別卻別 和其他表示式一起使用是,作為字首,先自增自減,再做其他操作 作為字尾,先做其他操作再自增自減 var num 5 num 相當於 num num 1 console.log num 4 num console.log num 5 nu...
賦值運算子 比較運算子 和邏輯運算子
基本賦值運算子就是乙個符號 代表將左邊的資料交給左側的變數。int a 30 符合復合賦值運算子 a 3 相當於 a a 3 b 4 相當於 b b 4 c 5 相當於 c c 5 d 6 相當於 d d 6 7 7 相當於 e 7 7 int a 10 a 5 system.out.println...