System.out.println(对象)的打印顺序

想请教一下为什么输出的是print main return,不是main print return呢?谢谢~

public class toStringTest {

    public static void main(String[] args) {

        System.out.println("main "+new toStringTest());
    }

    public String toString() {
        System.out.println("print");
        return "return";
    }

}

先执行了new toStringTest()实例化对象,由于toStringTest类重写了toString方法,会先调用,即输出print,然后返回return,后面输出main+return
最终结果应该如下:

print
main return

创建对象与代码执行流程:当执行main方法时,在主栈帧中压栈1“main”字符串值,再2创建toStringTest类并指向堆(3实例化实际对象)。由于对象是与字符串连接,默认调用对象的toString方法;toString方法压栈4“print”字符串值,执行输出命令,控制台输出“print”,压栈5“return”值。返回主方法,主栈帧压栈字符串连接对象6"main "+"return", 执行主方法输出命令,控制台输出“main return”图片说明