第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中覆蓋等于方法

如何在Java中覆蓋等于方法

三國紛爭 2019-06-24 16:52:42
我試圖在Java中重寫等于方法。我有課People其中基本上有兩個數(shù)據(jù)字段。name和age..現(xiàn)在我想重寫equals方法,這樣我就可以在兩個人對象之間進(jìn)行檢查。我的代碼如下public boolean equals(People other){     boolean result;     if((other == null) || (getClass() != other.getClass())){         result = false;     } // end if     else{         People otherPeople = (People)other;         result = name.equals(other.name) &&  age.equals(other.age);     } // end else     return result;} // end equals但當(dāng)我寫age.equals(other.age)它給了我錯誤,因?yàn)榈扔诜椒ㄖ荒鼙容^字符串和年齡是整數(shù)。解我用==如建議的運(yùn)算符,我的問題就解決了。如何在Java中覆蓋等于方法
查看完整描述

3 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個贊

//Written by K@stackoverflowpublic class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        ArrayList<Person> people = new ArrayList<Person>();
        people.add(new Person("Subash Adhikari", 28));
        people.add(new Person("K", 28));
        people.add(new Person("StackOverflow", 4));
        people.add(new Person("Subash Adhikari", 28));

        for (int i = 0; i < people.size() - 1; i++) {
            for (int y = i + 1; y <= people.size() - 1; y++) {
                boolean check = people.get(i).equals(people.get(y));

                System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
                System.out.println(check);
            }
        }
    }}//written by K@stackoverflowpublic class Person {
    private String name;
    private int age;

    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }

        if (!Person.class.isAssignableFrom(obj.getClass())) {
            return false;
        }

        final Person other = (Person) obj;
        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }

        if (this.age != other.age) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
        hash = 53 * hash + this.age;
        return hash;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }}

產(chǎn)出:

跑:

-Subash Adhikari-VS-K false

-Subash Adhikari-VS-StackOverflow false

-Subash Adhikari-VS-Subash Adhikari True

-K-VS-StackOverflow false

-K-VS-Subash Adhikari false

-StackOverflow-VS-Subash Adhikari false

-成功構(gòu)建(總時間:0秒)


查看完整回答
反對 回復(fù) 2019-06-24
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個贊

首先:你不是壓倒 equals,你是超載它。

沒有看到…的實(shí)際聲明age很難說出你為什么會犯這個錯誤。


查看完整回答
反對 回復(fù) 2019-06-24
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個贊

我不確定細(xì)節(jié),因?yàn)槟€沒有發(fā)布整個代碼,但是:

  • 記得重寫

    hashCode()

    也是
  • 這個

    equals

    方法應(yīng)該有

    Object

    ,不是

    People

    作為它的參數(shù)類型。目前,您正在重載,而不是重寫相等方法,這可能不是您想要的,特別是考慮到稍后檢查它的類型。
  • 你可以用

    instanceof

    檢查它是一個人的對象。

    if (!(other instanceof People)) { result = false;}

  • equals

    用于所有對象,但不用于原語。我覺得你的平均年齡是

    int

    (原語),在這種情況下,只需使用

    ==

    ..請注意,Integer(帶有大寫“i”)是一個對象,應(yīng)該將其與等于進(jìn)行比較。

看見在Java中重寫Equals和hashCode時,應(yīng)該考慮哪些問題?更多細(xì)節(jié)。


查看完整回答
反對 回復(fù) 2019-06-24
  • 3 回答
  • 0 關(guān)注
  • 518 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號