Here is an example of == and equals
在Java裡,equals和==常令程式設計師困惑,這裡簡單說明如下:
1. ==
測試物件參考時,唯有當兩個參考指向同一物件時,==運算子的結果才為true,同樣的,唯有當兩個參考指向不同物件時,!=運算子的結果才為true,這兩個運算子的處理與物件的內容無關。需要特別注意的是,在String中使用==,因為Java為節省記憶體,會在某一輪調區中維護唯一的String物件,所以如果在類別裡使用同一字串,Java只會建立一個唯一的字串而已。
2. equals
另一種測試的做法是equals,equals在類別為Java原先就存在時,是比較兩個物件是否為相同類型的類別後再比較其內容值是否相同,是就傳回true,否就傳回false。當要測試的類別是自定類別時,要依自定類別所提供的equals來決定如何比較,如果自定類別沒有覆蓋Object的equals類別的話,就以Object的equals來比較,Object的equals的比較方式如同==。
public class myEquals {
public myEquals() {
//字串型別
String sA = "ABC";
String sB = "ABC";
String sC = new String("ABC");
//==的比較
if (sA == sB)
System.out.println("sA == sB");
else
System.out.println("sA != sB");
if (sA == sC)
System.out.println("sA == sC");
else
System.out.println("sA != sC");
//equals的比較
if (sA.equals(sB))
System.out.println("sA.equals(sB) = true");
else
System.out.println("sA.equals(sB) = false");
if (sA.equals(sC))
System.out.println("sA.equals(sC) = true");
else
System.out.println("sA.equals(sC) = false");
//Java原有的型別
Long lngA = new Long(100);
Long lngB = new Long(100);
Long lngC = new Long("100");
//==的比較
if (lngA == lngB)
System.out.println("lngA == lngB");
else
System.out.println("lngA != lngB");
if (lngA == lngC)
System.out.println("lngA == lngC");
else
System.out.println("lngA != lngC");
//equals的比較
if (lngA.equals(lngB))
System.out.println("lngA.equals(lngB) = true");
else
System.out.println("lngA.equals(lngB) = false");
if (lngA.equals(lngC))
System.out.println("lngA.equals(lngC) = true");
else
System.out.println("lngA.equals(lngC) = false");
//自定型別
myObject1 m1A = new myObject1();
myObject1 m1B = new myObject1();
myObject2 m2A = new myObject2();
myObject2 m2B = new myObject2();
//==的比較
if (m1A == m1B)
System.out.println("m1A == m1B");
else
System.out.println("m1A != m1B");
if (m2A == m2B)
System.out.println("m2A == m2B");
else
System.out.println("m2A != m2B");
//equals的比較
if (m1A.equals(m1B))
System.out.println("m1A.equals(m1B) = true");
else
System.out.println("m1A.equals(m1B) = false");
if (m2A.equals(m2B))
System.out.println("m2A.equals(m2B) = true");
else
System.out.println("m2A.equals(m2B) = false");
}
public static void main(String[] args) {
myEquals myEquals1 = new myEquals();
}
}
執行結果
sA == sB
sA != sC
sA.equals(sB) = true
sA.equals(sC) = true
lngA != lngB
lngA != lngC
lngA.equals(lngB) = true
lngA.equals(lngC) = true
m1A != m1B
m2A != m2B
m1A.equals(m1B) = false
m2A.equals(m2B) = true
2009年1月20日 星期二
2009年1月7日 星期三
What is qemu?
http://en.wikipedia.org/wiki/QEMUToday I can't use my embedded board, because I don't have serial console line on hand today. So I try to find a simulator tool to run my ARM based software without HW.
Here is the qemu download url -
http://www.jk2410.org/release/host/qemu/qemu-jk2410-20080809.tar.bz2
Installation step is very easy, I did the follows
$tar jxvf qemu-jk2410-20080809.tar.bz2
$sudo apt-get install gcc-3.4
$sudo apt-get install libsdl-dev
$cd qemu-jk2410-20080809
$./configure --cc=/usr/bin/gcc-3.4 --target-list=arm-softmmu
$make
$sudo make install
Labels:
Embedded Linux
2009年1月5日 星期一
How to check CPU endian on Embedded Linux
Sometimes you don't know what type of CPU endian on your ARM platform. Here you can write a very simple program to test
/* Test CPU Endian */
#include
#include
int main() {
if (htons(1) == 1) puts("big endian");
else puts("little endian");
return 0;
}
/* End */
Labels:
Embedded Linux
訂閱:
文章 (Atom)