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

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

==運(yùn)算符在Java檢查內(nèi)存地址中的作用

==運(yùn)算符在Java檢查內(nèi)存地址中的作用

米琪卡哇伊 2022-06-04 15:36:30
直到今天,我還相信具有相同哈希碼的兩個(gè)對象意味著它們都具有相同的內(nèi)存位置。但下面的一段代碼完全講述了一個(gè)不同的故事:學(xué)生實(shí)體:公共類學(xué)生實(shí)現(xiàn) Comparable {int id;int marks;String Subject;public int getId() {    return id;}public void setId(int id) {    this.id = id;}public int getMarks() {    return marks;}public void setMarks(int marks) {    this.marks = marks;}public String getSubjects() {    return Subject;}public void setSubject(String subject) {    Subject = subject;}public Student() {}public Student(int id, String subject, int marks) {    super();    this.id = id;    this.marks = marks;    Subject = subject;}@Overridepublic int compareTo(Student o) {    if (this.getId()>(o.getId()))    return 1;    if (this.getId()<(o.getId()))    return -1;    return 1;}    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((Subject == null) ? 0 : Subject.hashCode());        result = prime * result + id;        result = prime * result + marks;        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Student other = (Student) obj;        if (Subject == null) {            if (other.Subject != null)                return false;        } else if (!Subject.equals(other.Subject))            return false;        if (id != other.id)            return false;        if (marks != other.marks)            return false;        return true;    }}
查看完整描述

3 回答

?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

好吧,hashCode()總是返回內(nèi)存地址并不完全正確。在您的特定情況下,您正在覆蓋該函數(shù)以基本上返回Subject引用的 hashCode。

您的評估顯示以下輸出:

stringops.Student@955a0720

這可能有點(diǎn)令人困惑,因?yàn)檫@實(shí)際上不是裸內(nèi)存地址,而是對toString()對象方法的調(diào)用。

看看Java是如何實(shí)現(xiàn)的 toString

getClass().getName() + '@' + Integer.toHexString(hashCode())

所以,事實(shí)上,這兩個(gè)對象有不同的內(nèi)存位置,但是因?yàn)槟愀采whashCode()你不會看到它們。此外,沒有辦法覆蓋 Java 如何選擇對象的內(nèi)存地址(可能除了一些 hack),但是,兩個(gè)對象不能具有相同的地址。

下次請包含更多文本而不是屏幕截圖,以提高其他人對您的問題的搜索能力。


查看完整回答
反對 回復(fù) 2022-06-04
?
Helenr

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

您剛剛正確地確定了兩個(gè)不同的對象——即不在同一內(nèi)存地址的兩個(gè)對象——確實(shí)可以具有相同的哈希碼。規(guī)則是,如果兩個(gè)對象通過該.equals()方法相等,那么它們應(yīng)該產(chǎn)生相同的哈希碼。除了這個(gè)和“不同的對象應(yīng)該嘗試有不同的哈希碼”的一般想法之外,沒有要求不同位置的對象應(yīng)該有不同的哈希值。

不過,這是一件好事。例如,String每個(gè)具有相同字符序列的兩個(gè)不同對象應(yīng)該直觀地具有相同的哈希碼,以便HashMap<String, T>可以正確查找字符串。這樣,提供與String用作鍵的對象不同但具有相同邏輯值的對象將正常工作;所有String具有相同字符序列的 s 散列到同一個(gè)位置。


查看完整回答
反對 回復(fù) 2022-06-04
?
溫溫醬

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

hashcode 是一個(gè) int 值,由 hascode() 方法返回。

Object.java 定義了 hascode() 并且每個(gè) java 類都是 Object.java 的子類,因此每個(gè)類都繼承它。

如果他/她希望覆蓋它,則取決于特定類的開發(fā)人員。類的開發(fā)人員可能會選擇(盡管是一種不好的做法)為類的所有對象重新運(yùn)行相同的常量 int 值。

通常 hascode 取決于對象的一個(gè)或多個(gè)屬性的值。即使開發(fā)人員可能會盡力返回唯一的哈希碼,但仍然(哈希碼沖突)兩個(gè)不同的對象最終可能會得到相同的哈希碼。

一次只能將一個(gè)內(nèi)存位置分配給一個(gè)對象。

兩個(gè)不同對象的哈希碼(位于內(nèi)存中的兩個(gè)不同地址)可能相同也可能不同

還有一個(gè)相關(guān)的概念:equals 和 hascode 方法的合同。它表示如果兩個(gè)對象通過調(diào)用 equals 返回 true,則兩個(gè)對象必須具有相同的哈希碼。請注意,這是定義的合同,但由開發(fā)人員開發(fā)類并編寫哈希碼方法以遵守合同。一個(gè)糟糕的實(shí)現(xiàn)可能會導(dǎo)致兩個(gè)對象返回不同的hascode,對于equals方法返回true。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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