为什么输出不一样?

Che*_*tan 0 java string swap

拳头的输出System.out.println()与第二个不一样System.out.println()
可能是什么原因?

public class swapex{
    public static int var1, var2;

    public void badSwap(int var1, int var2){
        int temp = var1;
        this.var1 = var2;
        this.var2 = temp;
        System.out.println("var1 " + var1 + " var2 "+ var2);
    }

    public static void main(String args[])
    {
        swapex sw= new swapex();
        sw.badSwap(10,20);
        System.out.println("var1 " + var1 + " var2 "+ var2);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 8

第一个是输出参数值,第二个是输出静态字段.

让我们看看相关值的所有含义.

public void badSwap(int var1, int var2){
Run Code Online (Sandbox Code Playgroud)

var1并且var2是传递给方法的参数.

int temp = var1;
Run Code Online (Sandbox Code Playgroud)

temp设置为传递给var1.

this.var1 = var2;
Run Code Online (Sandbox Code Playgroud)

静态字段var1设置为传入var2.这种风格很差,因为它不必要地混淆.如果你有理由使用静态,写swapex.var1.

this.var2 = temp;
Run Code Online (Sandbox Code Playgroud)

同样,正在设置静态字段.

System.out.println("var1 " + var1 + " var2 "+ var2);
Run Code Online (Sandbox Code Playgroud)

当地人正在印刷.

回到主,行:

System.out.println("var1 " + var1 + " var2 "+ var2);
Run Code Online (Sandbox Code Playgroud)

解析为静态字段,因为没有带有这些名称的堆栈变量.再次,这也是糟糕的风格.你会用swapex.var1swapex.var2.

因此,它们打印方式不同的原因是您首先打印原始未刷新的参数,然后打印交换(反向参数)静态字段.