Java中的數(shù)據(jù)類型,可分為兩類:
1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。
byte,short,char,int,long,float,double,boolean,他們之間的比較,應(yīng)用雙等號(hào)(==),比較的是他們的值。
2.引用數(shù)據(jù)類型(類)
當(dāng)它們用(==)進(jìn)行比較的時(shí)候,比較的是他們?cè)趦?nèi)存中的存放地址,所以,除非是同一個(gè)new出來(lái)的對(duì)象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。
Java當(dāng)中所有的類都是繼承于Object這個(gè)基類的,在Object中的基類中定義了一個(gè)equals()的方法,這個(gè)方法的初始行為是比較對(duì)象的內(nèi)存地址,但在一些類庫(kù)當(dāng)中這個(gè)方法被覆蓋掉了,如String,Integer,Date在這些類當(dāng)中equals有其自身的實(shí)現(xiàn),而不再是比較類在堆內(nèi)存中的存放地址。
對(duì)于引用數(shù)據(jù)類型之間進(jìn)行equals比較,在沒(méi)有覆寫equals方法的情況下,他們之間的比較還是基于他們?cè)趦?nèi)存中的存放位置的地址值的,因?yàn)镺bject的equals方法也是用雙等號(hào)(==)進(jìn)行比較的,所以比較后的結(jié)果跟雙等號(hào)(==)的結(jié)果相同。
Object中的equals()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
publicbooleanequals(Objectobj){ return ( this ==obj); } 舉個(gè)實(shí)例: packageorg.java.test; publicclassPerson{ privateintage; privateStringname; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this .age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this .name=name; } publicPerson(intage,Stringname){ this .age=age; this .name=name; } publicPerson(){ } @Override publicinthashCode(){ finalintprime= 31 ; intresult= 1 ; result=prime*result+age; result=prime*result+((name== null )? 0 :name.hashCode()); returnresult; } @Override publicbooleanequals(Objectobj){ if ( this ==obj) returntrue; if (obj== null ) returnfalse; if (getClass()!=obj.getClass()) returnfalse; Personother=(Person)obj; if (age!=other.age) returnfalse; if (name== null ){ if (other.name!= null ) returnfalse; }elseif(!name.equals(other.name)) returnfalse; returntrue; } } MainTest.java[java]view plaincopyprint? packageorg.java.test; publicclassMainTest{ publicstaticvoidmain(String[]args){ Personp1=newPerson( 99 , "A" ); Personp2=newPerson( 99 , "A" ); Personp3=p1; System.out.println(p1==p2); //false System.out.println(p1==p3); //true System.out.println(p1.equals(p2)); //未重寫equals()方法,返回false //重寫equals()方法后,比較的是內(nèi)容,返回true; System.out.println( "<====================>" ); Strings1= "hello" ; Strings2= "hello" ; Strings3=newString( "hello" ); System.out.println(s1==s2); //true System.out.println(s1==s3); //false System.out.println(s1.equals(s2)); //true System.out.println(s1.equals(s3)); //true } } |
希望本文對(duì)各位朋友有所幫助
原文鏈接:http://www.2cto.com/kf/201701/588624.html