當前位置:首頁 » 編程語言 » java重寫equals

java重寫equals

發布時間: 2022-12-15 09:55:50

java中關於==和equal的區別 以及equals方法重寫

//==與equals的默認行為都是比較引用是否相等,即是否引用了同一個對象。
//且==的行為是固定的,它總是比較引用,
//而equals的行為可以在子類中由用戶重寫。
//沒有equal方法。下面是例子。

public class EQ
{
public static void main(String[] args)
{
//s11,s12引用了兩個不同的對象,這兩個對象的所有欄位的值都相等
Student1 s11=new Student1("lili",'女',19);
Student1 s12=new Student1("lili",'女',19);
//s11,s13引用了一個相同的對象
Student1 s13=s11;

//這個if...else輸出s11!=s12,因為==默認是比較引用,
//而s11與s12引用的是兩個不同的對象
if(s11==s12)
{
System.out.println("s11==s12");
}
else
{
System.out.println("s11!=s12");
}

//這個if...else輸出not s11.equals(s12),
if(s11.equals(s12))
{
System.out.println("s11.equals(s12)");
}
else
{
System.out.println("not s11.equals(s12)");
}

//這個if...else輸出s11==s13,
//因為s11與s13引用的是同一個對象
if(s11==s13)
{
System.out.println("s11==s13");
}
else
{
System.out.println("s11!=s13");
}

//這個if...else輸出s11.equals(s13)
if(s11.equals(s13))
{
System.out.println("s11.equals(s13)");
}
else
{
System.out.println("not s11.equals(s13)");
}

//s21,s22引用了兩個不同的對象,這兩個對象只有age欄位的值相等
Student2 s21=new Student2("lili",'女',19);
Student2 s22=new Student2("張三",'男',19);

//這個if...else輸出s11!=s12,因為==總是比較引用
if(s21==s22)
{
System.out.println("s21==s22");
}
else
{
System.out.println("s21!=s22");
}

//這個if...else輸出s21.equals(s22),因為調用的是子類Student2的重寫的equals方法
if(s21.equals(s22))
{
System.out.println("s21.equals(s22)");
}
else
{
System.out.println("not s21.equals(s22)");
}
}
}
class Student1
{
Student1(String n,char s,int a)
{
this.name=n;
this.sex=s;
this.age=a;
}

String name;
char sex;
int age;
}
//重寫了繼承自類Object的equals和hashCode方法
class Student2
{
Student2(String n,char s,int a)
{
this.name=n;
this.sex=s;
this.age=a;
}
//重寫equals,如果兩個Student2對象的age值相等,則它們相等
//重寫此方法時,通常也必須重寫hashCode方法,以維護hashCode方法的常規協定,
//該協定聲明相等對象必須具有相等的哈希碼。
public boolean equals(Object obj)
{
boolean r=false;

System.out.println("Student2.equals被調用!");
if(null!=obj && obj instanceof Student2)
{
r=(this.age==((Student2)obj).age);
}
return r;
}
//重寫hashCode
public int hashCode()
{
return age;
}
String name;
char sex;
int age;
}

❷ java類重寫equals裡面有欄位是空的怎麼辦一個一個判斷非空嗎

1.引用類型的基類沒有重寫Equals
2.引用類型的基類重寫了Equals
3.值類型重寫了Equals if (this == obj) return true; //對象類型是否相同,不同返回false if (obj == null) return false; //對象是否為空,為空返回false if (!(obj instanceof Person)) return false; //對象不是Person類型 Person other = (Person) obj; //定義一個Person對象 if (age != other.age) return false; //age是否等於other.age if (name == null) { //姓名為空,,,,,下面的不解釋了,自己應該看得懂了 if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } 這段代碼重寫equals方法的原因,應該是person對象只有在姓名和年齡都相同時,才返回true,大概是用來判斷是不是同一個人的吧

❸ 如何重寫Java中的equals方法

//在你的類A中定義一個簽名為
//@Override
//public boolean equals(Object obj)的方法就能重寫(覆蓋)Object類的同名方法了,
//以後調用equals方法比較兩個類A的對象的相等性時,就會調用你重寫的方法了。
//看例子。
public class Demo
{
public static void main(String[] args)
{
A a1=new A(1,'a'),a2=new A(1,'b'),a3=new A(1,'a');
//調用類A的重寫的equals方法比較3個對象的相等性
//false
System.out.println(""+a1.equals(a2));
//true
System.out.println(""+a1.equals(a3));
//false
System.out.println(""+a2.equals(a3));
}
}
class A
{
A(int n,char c)
{
this.n=n;
this.c=c;
}
//@Override可省略
@Override
public boolean equals(Object obj)
{
System.out.println("調用了重寫的類A的equals方法。");
boolean r=false;
A a;

if(obj instanceof A)
{
a=(A)obj;
r=(this.n==a.n && this.c==a.c);
}
return r;
}
private int n;
private char c;
}

❹ 如何重寫Java中的equals方法

publicclassTest{

privateLongid;

publicLonggetId(){
returnid;
}

publicvoidsetId(Longid){
this.id=id;
}

publicbooleanequals(Testt){
returnthis.getId().compareTo(t.getId())==0;
}

publicstaticvoidmain(String[]args){
Testt1=newTest();
Testt2=newTest();
t1.setId(1L);
t2.setId(1L);
System.out.println(t1.equals(t2));
}

}

其實重寫equals 就是為了讓某個類符合自己的equal標准。 比如上面的例子, 重寫了Test的equals方法(equals方法是Object的,所以所有的類都有equals方法。)我們的標準是 一旦兩個test 的id相同 那麼我們就認為他們equal。 如果把重寫的equals方法注釋掉, 再運行 會列印false, 因為會調用super的equals方法, super的方法體是 obj1 == obj2 跟id沒有關系。

❺ java equals方法的重寫

我幫你重寫一下你這個類裡面的equals方法吧 ,以後都可以根據情況套用:
public boolean equals(Object obj) {
if(obj==null)
return false;
if(this == obj){
return true;
}
if (obj instanceof Person) {
Person other = (Person) obj;
return (p.name).equals(this.name);
}
return false;
}

❻ java為什麼要重寫equals !

重寫並不是說object類裡面的equals方法有缺陷,而是為了不同場景的需要。不同對象相同的方法不一樣。
比如說對象是人,它有2個屬性,name和height。有AB兩個人,我們怎麼來判斷這兩個人是同一個人還是不同的人,這里就要用到比較 , A.equals(B);
這里的equals就需要重新object類里的方法,來告訴程序,怎麼判斷2個人是同一個人
1。名字相同他們就是同一個人
2。name 和height 相同才是一個人
所以需要重新,例子簡單不曉得你看明白沒。

❼ 在 com . tjl .demo18/ Student . java 類中為什麼重寫equals

equals方法繼承自Object類,Object的equals方法是通過判斷地址是否相同來判斷是否同一對象,也就是是否相等。
在Student類中重寫equals方法,是希望通過判斷Student的屬性,比如學生id之類的鍵值屬性是否相等或者多個組合屬性(姓名、班級、年齡等等)是否相等來判斷是否同一對象。否則只會判斷兩個Student是否存儲地址相等來判斷是否同一對象。

熱點內容
安卓手機鎖了怎麼開 發布:2025-01-23 17:21:18 瀏覽:136
經濟學演算法 發布:2025-01-23 17:13:46 瀏覽:420
如何和軟體聯系伺服器 發布:2025-01-23 17:13:00 瀏覽:799
javacrc16演算法 發布:2025-01-23 17:11:31 瀏覽:224
編程加圖片 發布:2025-01-23 17:10:33 瀏覽:566
中國風網站源碼 發布:2025-01-23 17:05:56 瀏覽:679
pythonfilter用法 發布:2025-01-23 17:04:26 瀏覽:568
java轉number 發布:2025-01-23 16:58:11 瀏覽:476
解壓的英語作文 發布:2025-01-23 16:45:05 瀏覽:969
湖南首選dns伺服器地址 發布:2025-01-23 16:06:39 瀏覽:874