嵌套的"System.out.print"输出

swo*_*ton 2 java system.out

为什么这个程序:

import java.io.*;

public class testpage
{
    public static void main(String [] args)
    {
        pri();
    }

    public static int p2 (int x)
    {
        System.out.print("p");
        return x * x + 1;
    }

    public static void pri ( )
    {
        int y = 3;
        System.out.print( p2(y) + "-" + p2(y));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出这个:

pp10-10
Run Code Online (Sandbox Code Playgroud)

具体来说,为什么-当方法调用相同时,每一侧的输出会有所不同?

rge*_*man 10

Java将+在执行操作之前评估二元运算符的操作数.这意味着p2(y)在连接发生之前将被调用两次.2方法p在连接之前调用每个打印,然后System.out.print打印10-10.

JLS,第15.17.2,占地面积这样的:

Java编程语言保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估.