2015-09-26 217 views
-2

有主類和2個示例類。一個延伸HashMap什麼時候返回null?

本公司主營:

public class Main { 
    public static void main(String[] args) { 
     System.out.println("Positive:"); 
     PositiveExample positiveExample = new PositiveExample(); 
     positiveExample.printThis(); 
     System.out.println("Negative:"); 
     NegativeExample negativeExample = new NegativeExample(); 
     negativeExample.printThis(); 
    } 
} 

標準之一:

public class PositiveExample { 
    void printThis() { 
     System.out.println(this); 
     System.out.println(this == null); 
    } 
} 

和基於HashMap的一個。

import java.util.HashMap; 

public class NegativeExample extends HashMap { 
    void printThis() { 
     System.out.println(this); 
     System.out.println(this == null); 
    } 
} 

現在看看控制檯輸出:

正:
PositiveExample @ 2a139a55

負:
{}

而且注意空虛{}。與標準類輸出中的[email protected]相反。

基於HashMap的輸出類說this不是null,但這就是它的行爲方式,不是。檢查一下你自己。

我對Java構建1.8.0_60-B27,Ubuntu的14.04 64位。

+0

當您沒有發佈任何代碼時很難解決。 – Tunaki

+0

如果沒有您發佈的相關代碼,我不確定您希望我們如何理解您的問題或您的代碼。請通過[遊覽],[幫助]和[如何提出一個很好的問題](http://stackoverflow.com/help/how-to-ask)部分來查看本網站的工作原理並幫助您改善您當前和未來的問題,這可以幫助您獲得更好的答案。 –

+0

那麼,這個問題並不需要比我已經發布的更多的代碼,以我的理解。問題是爲什麼這返回null。簡單。它不應該,對吧? – Tomasz

回答

3

你知道在返回null的類中有this的任何例子嗎?

不,這不可能發生。期。代碼中的某處存在一個錯誤,它令您覺得this爲空,但事實並非如此。如果你覺得不然,那麼你會想發佈你的相關代碼來證明你的假設是正確的。

編輯:我剛剛發現了一個duplicate question即進入進一步的細節。

只是一個沒有任何代碼的一般問題,因爲它不是必需的。

你是正確的,回答直接的問題,在你的編輯以上後,無需代碼。但是,如果你想找到你的代碼真正問題,那就是給你的錯誤想法,this是空的,然後根據我在評論中指出,你要創建和發佈您Minimal, Complete, and Verifiable example


編輯2
感謝你更新你的代碼。控制檯的輸出結果是完全一樣的人們所期望的:

Positive:      
[email protected] // this is the default toString of a class that has not overridden toString 
false       // as expected, this is NOT null 
Negative: 
{}       // this is the toString returned from the parent class, HashMap, specifically an EMPTY HashMap 
false       // as expected, this is NOT null 

問題擁有所有與你的toString()方法的理解(或誤解)。如果您沒有重寫該方法,或者有一個超類的超類,它將默認使用Object類中的toString()方法,然後返回類名稱和對象的hashCode。如果你重寫它或者有一個覆蓋的父類,它將返回它被告知返回的任何內容。這裏HashMap覆蓋,並返回地圖的內容,這裏什麼都沒有

相關問題