繁体   English   中英

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

[英]Why does my object not need to call the .toString method?

在我的代码底部的测试类中,您可以看到一堆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);
}

}

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

System.out.println()为您做到了这一点。

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

String.valueOf()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM