Object類和String類equals方法的區別
String類的equals方法和“==”
相信很多學習過Java的同學都知道,在比較兩個String物件的內容是否相同時是使用equals方法的
如:String str1=new String(“A”);
String str2=new String(“B”);
String str3=new String(“B”);
boolean result1= str1.equals(str2);
boolean result2= str2.equals(str3);
System.out.println(result1);
System.out.println(result2);
則輸入的result1為false,result2為true。因為str1與str2的內容不相同,而str2與str3內容相同都是“B”。
而在String類中使用“==”時,比較的是兩個String物件的引用是否指向同一個物件,如
String str4=new String(“B”);
String str5=new String(“B”);
String str6=str5;
boolean result3=(str4==str5);
boolean result4= (str5==str6);
System.out.println(result3);
System.out.println(result4);
則輸入的result3為false,result4為true。因為str4、str5雖然內容相同但它們是不同的物件,就像兩個同樣的杯子裝著同樣多的水,可它們是不同的,result3為false。而str5、str6是指向同一個String物件的,所以result4為true。
equals()方法在String類中的定義
string 類的成員變數
<span style="font-size:14px;">public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
{
/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;
/** Cache the hash code for the string */
private int hash; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;
</span>
equals方法原始碼
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
在String類的equals方法中,先使用“==”比較兩個物件是否是同一個物件的引用,如果是,返回true;如果不是,怎麼繼續比較兩個String物件的大小以及內容。equals()方法在Object類中的定義
equals方法原始碼
<span style="font-size:24px;"> </span><span style="font-size:14px;">public boolean equals(Object obj) {
return (this == obj);
}</span>
比較基本資料型別,如果兩個值相同,則結果為true ,而在比較引用時,如果引用指向記憶體中的同一物件,結果為true.
"=="在這裡是在比較兩個物件是否指向記憶體中的同一物件。在Object類的equals方法的本質其實是和“==”一樣的,都是比較兩個物件引用是否指向同一個物件(即兩個物件是否為同一物件)
我們通常自定義的物件,通常需要重寫Equals方法。
equals()方法
<span style="font-size:14px;">class Person
{
private String name;
private int age;
public Person(String name, int age)
{
this.name = name ;
this.age = age ;
}
public void show()
{
System.out.println(name + ", " + age);
}
public boolean equals (Object obj)
{
if(!(obj instanceof Person)) //如果不是Person型別,直接返回false
return false;
//this是p1 ,obj是p2
Person p = (Person)obj; s //由於訪問person特有的成員,需要把obj裝換成person類.
//if(this.name != p.name)
if(this.name == null)
{
if (p.name != null) //比較名字
return false;
}
else if(!this.name.equals(p.name))
return false;
if (this.age != p.age)
return false;
return true;
//return (this = obj);
}
}</span>
相關文章
- String類中的equals方法與Object類中的equals方法的不同點Object
- ==和equals方法的區別
- String的equals和hashCode方法
- Java中 equals() 方法和 == 的區別Java
- Java之String的equals與contentEquals區別Java
- StringBuffer類的delete()方法和deleteCharAt()方法的區別delete
- String 類的 substring () 方法
- String類常用的方法
- Java Object類 和 String類 常見問答 6k字+總結JavaObject
- 【轉】Object類的常用方法Object
- 【Java】equals 和 == 的區別Java
- JAVA集合類簡要筆記 - 內部類 包裝類 Object類 String類 BigDecimal類 system類Java筆記ObjectDecimal
- 關於PHP this 和 self 呼叫類方法的區別PHP
- Java Object類的各個方法JavaObject
- Java中Object類的常用方法JavaObject
- 介面和抽象類的區別抽象
- java 中equals和==的區別Java
- String、StringBuffer和StringBuilder類的UI
- Java中String類的常用方法Java
- MVC下的DAO介面類和SERVICE介面類區別?MVC
- JavaBean重寫Object類中的方法JavaBeanObject
- 【ASP.net】Equals 和 == 的區別ASP.NET
- hashCode()和equals()的區別?(skycto JEEditor)
- 深入理解equals和==的區別
- Python中類方法和例項方法有什麼區別?Python
- object類Object
- JAVA中object類中toString()方法JavaObject
- String和StringBuilder的區別UI
- StringBuilder和String 的區別?UI
- Java基礎- ==和equals和hashCode的區別Java
- Java常用類-Object類JavaObject
- python中類方法的區別是什麼Python
- Java基礎-- ==號與equals()方法的區別Java
- 你真的知道 == 和 equals 的區別嗎?
- 你真的懂 == 和 equals 的區別嗎?
- Java--String類查詢方法Java
- String類
- String類的使用
- faker 類 randomElement () 方法和 array_random () 函式區別分析。random函式