2014-02-05 108 views
0

在我的代碼底部的測試類中,您可以看到一堆的system.out.print。我的問題是:爲什麼堆棧對象不需要寫成stack.toString()(而是寫入system.out.print(stack))。 print語句是否動態調用toString()方法,因爲它是該類中唯一可用的字符串方法....或者它是其他方法嗎?爲什麼我的對象不需要調用.toString方法?

public class Char_Stack { 
private char [] array = new char[10]; 
private int top = 0; 

public int size() { 
    return top; 
} 

public boolean isEmpty() { 
    return top == 0; 
} 

public void push(char value) throws StackFullException { 
    if (top == array.length)  
    throw new StackFullException("StackFullException"); 
    array[top++] = value; 
} 

public double top() throws StackEmptyException { 
    if (top == 0) 
    throw new StackEmptyException("StackEmptyException"); 
    return array[top-1];   
} 

public double pop() throws StackEmptyException { 
    if (top == 0) 
    throw new StackEmptyException("StackEmptyException"); 
    return array[--top]; 

} 

public String toString() { 
    String out = "[" + top + "/" + array.length + "]"; 
    for (int i=0;i<array.length; i++) { 
     out += " " + array[i]; 
    } 
    return out; 
} 

public static void main(String[] args) throws StackFullException,StackEmptyException { 
    Char_Stack stack = new Char_Stack(); 

    stack.push('Y'); 
    System.out.println(stack); 

    stack.push('P'); 
    System.out.println(stack); 

    stack.push('P'); 
    System.out.println(stack); 

    stack.push('A'); 
    System.out.println(stack); 

    stack.push('H'); 
    System.out.println(stack); 

    stack.pop(); 
    System.out.println(stack); 

    stack.pop(); 
    System.out.println(stack); 

    stack.pop(); 
    System.out.println(stack); 

    stack.pop(); 
    System.out.println(stack); 

    stack.pop(); 
    System.out.println(stack); 
} 

}

+6

需要多少傷害[讀的Javadoc(http://docs.oracle.com/javase/7/docs/api /java/io/PrintStream.html#println(java.lang.Object))? –

+1

,因爲Java很聰明:) –

+0

隨意看看['println(Object)'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/ java/io/PrintStream.java#PrintStream.println%28java.lang.Object%29)在內部工作。 – Pshemo

回答

1

粗略地說,是的,它的作用。它會「盡力」打印出來。 System.out.println(object)調用String.valueOf(object)會發生什麼情況,依次調用object.toString()

1

System.out.println()爲您做到了這一點。

打印一個對象,然後終止該行。 該方法首先調用String.valueOf(x)以獲取打印對象的字符串值,然後像調用print(String)和println()那樣操作。

String.valueOf()

如果參數爲空,則一個等於 「零」 的字符串;否則,obj.toString()的值返回

相關問題