在我的代碼底部的測試類中,您可以看到一堆的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);
}
}
需要多少傷害[讀的Javadoc(http://docs.oracle.com/javase/7/docs/api /java/io/PrintStream.html#println(java.lang.Object))? –
,因爲Java很聰明:) –
隨意看看['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