2016-12-21 25 views
0

我不明白爲什麼date2的打印04/10/2016爲什麼參考對象有2016年10月4日?

1)我沒有叫具有RETURN方法
2)有兩種方法,用相同的參數,但DIFF輸出

MyDate date2 = new MyDate(4,10,2008); 
     System.out.println(date2); 

---------------------------------------- 
//MyDate class 
public class MyDate{ 

public int day; 
public int month; 
public int year; 


public MyDate(){ 
} 

//Constructor that takes 3 arguments 
public MyDate(int m, int d, int y){ 
setDate(m, d, y); 
} 
//Methods 

public String toString1(){ 
return day + "/" + month + "/" + year; 
} 

public String toString(){ 
return month + "/" + day + "/" + year; 
} 

public void setDate(int m, int d, int y){ 
day = d; 
year = y; 
month = m; 
} 
} 
+1

你期望輸出什麼? –

+0

所以你想知道爲什麼向'toString'方法名添加任意數字不算作「工作」? – Tom

+0

嘗試使用代碼,norepro。 – Compass

回答

1

它在內部調用toString()當您嘗試轉換一個ObjectString對你來說這是實現打印出來

+0

那麼爲什麼它不調用toString1()? – MAS400

+0

,因爲它被編碼爲調用['toString()'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java #String.valueOf%28java.lang.Object%29) –

+0

@ MAS400'System.out.println'專門調用'toString()',而不是調用'toString1()'或任何其他方法。 – GriffeyDog

0

我沒有underst爲什麼DATE2印刷2016年4月10日,

隨着MyDate類及其toString()方法,System.out.println(date2)應打印4/10/2016,因爲一個int不是字符串formater,因此不加0前綴。

public class MyDate{ 

public int day; 
public int month; 
public int year; 

... 
    public String toString(){ 
    return month + "/" + day + "/" + year; 
    } 
... 
} 

編輯發表評論

如你初學者,我會盡量分解,但保持簡單。

你的審訊來自什麼這個方法的作用:

System.out.println(date2); 

第一:你要明白這行的意思。
這裏,調用System類的outPrintStream字段的println()方法和你提供作爲該方法的date2變量這是MyDate實例的參數。
你應該感興趣的是println()
這個命名可能會讓你猜測它與某個東西的顯示有關係,但情況卻是如此,但沒有什麼比javadoc和類的源代碼更好理解它。

println()PrintStream的重載方法。所以你必須確定調用哪一種方法。作爲參數與MyDate兼容的類型的單一方法是void java.io.PrintStream.println(Object x)。 有關信息,所有類都從Object類派生,因此MyDate是一個Object

看其的Javadoc:

java.io.PrintStream中

空隙java.io.PrintStream.println(對象X)

打印Object,然後終止線路。此方法首先調用 String。valueOf(x)獲取打印對象的字符串值,那麼 的行爲就像調用print(String)然後println()一樣。

參數:x要打印的對象。

這是相當清楚的方法做什麼:

  • 它調用String.valueOf(x)得到x對象

  • 然後從x打印檢索到的字符串值的String值。

但是String.valueOf(x)是什麼?

有一次,Javadoc和源代碼將幫助您:

/** 
* Returns the string representation of the {@code Object} argument. 
* 
* @param obj an {@code Object}. 
* @return if the argument is {@code null}, then a string equal to 
*   {@code "null"}; otherwise, the value of 
*   {@code obj.toString()} is returned. 
* @see  java.lang.Object#toString() 
*/ 
public static String valueOf(Object obj) { 
    return (obj == null) ? "null" : obj.toString(); 
} 

它返回的obj參數toString()方法的結果,如果obj不爲空,otherwhise返回「空」字符串。

現在回到您的代碼。
裏面,你宣佈這兩種方法:

public String toString1(){ 
    return day + "/" + month + "/" + year; 
} 

public String toString(){ 
    return month + "/" + day + "/" + year; 
} 

toString()因此邏輯上叫做,你應該刪除或因爲它是容易出錯的命名命名toString1()方法。

如果您想根據多種格式來格式化您的MyDate實例,您應該有兩種方法來執行它,但是您應該避免將自定義方法與toString()方法混合。

你可以有例如:

public String toStringInDDMMYYYY(){ 
... 
} 

public String toStringInMMDDYYYY(){ 
... 
} 

另外,你可以使用SimpleDateFormat格式化您的日期和使用Date對象,而不是定製Date對象,但是當你在Java中開始,我可以理解你考什麼不同的東西。

+0

這就是它*爲我打印的,非常好,很好。我只是不確定這是否回答了OP正在嘗試的問題,而不是很成功。 –

+0

可能。這是爲了表明這個問題和所描述的問題並不能反映代碼的實際功能。 – davidxxx

+0

*****我是新的蜜蜂在JAVA世界,剛開始學習**** \t 我不擔心前綴0, 我的問題是當創建對象引用時,沒有引用toString(),爲什麼date2返回值來自toString() 如果你說系統會喚起這個方法toString(),那麼爲什麼不用其他類似的方法toString1(),它有相同的輸入和差分輸出數? – MAS400

相關問題