2015-12-30 41 views
0

您好我正在看關於對象,實例的另一篇文章在stackoverflow。創建一個對象並將其打印出來,但打印出參考。如何解決這個問題?

我試了一些代碼。

public class Puppy{ 

    public Puppy(String name){ 
     // This constructor has one parameter, name. 
    System.out.println(name); 
    } 

    public static void main(String []args){ 
     // Following statement would create an object myPuppy 
     Puppy myPuppy = new Puppy("Tommy"); 
     Puppy myPuppy2 = new Puppy ("Sally"); 
     System.out.println(myPuppy); 
    } 
} 

輸出是

Tommy 
Sally 
[email protected] 

問題: 當我試圖打印出的主要方法的對象myPuppy,它打印出它的引用,而不是價值?我應該如何解決這個問題?

此外,一些人提到,我沒有真正存儲小狗的名字,我需要寫一個覆蓋toString方法來打印出的值而不是參考。 我應該如何完成上述?

非常感謝!

+2

覆蓋'Puppy'中的'toString'。另外,你沒有在構造函數中存儲'name'。 –

回答

1

您必須實現toString()Puppy ...

@Override 
public String toString() { 
    return "Puppy[name=" + name + "]"; 
} 

顯然,使其返回滿足您的需求String

編輯:正如其他人所提到的,確定你確實名構建Puppy時。

+0

嗨,非常感謝!在構建Puppy對象時如何存儲名稱(或變量?)? –

0

那麼確保你引用了Puppy中的特定變量,所以爲了做到這一點,你需要在puppy類中創建一個「名稱」變量,然後在System.out.println(myPuppy.name );或者有此特效,因爲它實際上並不存儲小狗的名字

+0

非常感謝!我應該如何儲存小狗名字的價值? –

+0

好吧1)把你的主類和puppy類分開,然後在puppy類內創建一個String名稱,在Puppy的構造函數中使它接受一個String並使name =爲接收到的字符串,然後從main類中你實例化一個Puppy對象分析字符串值)調用System.out.println(MyPuppy.name) –

0

隨着最後一個System.out.println輸入一個對象作爲參數。你回來的東西([email protected])是一個對象引用。

中獲取價值,你必須重寫toString ,導致:

@Override 
public String toString() { 
    return "Puppy's name: " + name; 
} 

每個對象作爲一個toString梅索德,但這將大部分的時間給一個refernce回來,通過覆蓋Java將使用您的版本toString()

+0

嗨,非常感謝!是的,我嘗試使用System.out.println(myPuppy.toString());但它仍然給我提供參考。然後我嘗試了你的方法,但它完全給我一個編譯器錯誤。然後我試着將公共字符串toString(小狗名字){ } return「Puppy's name:」+ name; },然後在主要方法中使用System.out.println(myPuppy.toString())。但仍然給我參考 –

+0

@huskylove首先你需要將名稱存儲在一個變量 - >私人字符串名稱;在你的構造函數中,你可以設置名字 - > this.name = name;你做完這些之後。你可以複製粘貼toString代碼。在你的主體中,你可以通過 - > System.out.println(myPuppy.toString())來調用它。 –