为什么我的对象不需要调用.toString方法?

时间:2014-02-05 13:08:31

标签: java object polymorphism

在我的代码底部的测试类中,您可以看到一堆system.out.print。我的问题是:为什么堆栈对象不需要写成stack.toString()(而是编写system.out.print(stack))。 print语句是否动态调用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);
}

}

3 个答案:

答案 0 :(得分:1)

粗略地说,是的,确实如此。它会“尽力”打印出来。会发生什么情况System.out.println(object)调用String.valueOf(object),然后调用object.toString()

答案 1 :(得分:1)

System.out.println()为你做到了。

  

打印一个对象,然后终止该行。 此方法首先调用String.valueOf(x)来获取打印对象的字符串值,然后表现为调用print(String)然后调用println()。

String.valueOf()

  

如果参数为null,则字符串等于“null”;否则,返回obj.toString()的值

答案 2 :(得分:0)