为什么输出不一样?

时间:2010-04-06 05:21:16

标签: 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);
    }
}

4 个答案:

答案 0 :(得分:8)

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

让我们看一下相关值的所有含义。

public void badSwap(int var1, int var2){

var1var2是传递给方法的参数。

int temp = var1;

temp设置为传入的var1。

this.var1 = var2;

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

this.var2 = temp;

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

System.out.println("var1 " + var1 + " var2 "+ var2);

正在印刷当地人。

回到主页,行:

System.out.println("var1 " + var1 + " var2 "+ var2);

解析为静态字段,因为没有包含这些名称的堆栈变量。再次,这也是糟糕的风格。您可以使用swapex.var1swapex.var2

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

答案 1 :(得分:1)

您在badswap中设置的变量是本地参数,而不是swapex的静态成员。由于本地范围优先,静态成员不变

第一次打印时,打印本地参数,第二次打印静态成员

要使两者相同,请将参数的名称更改为badswap()。

答案 2 :(得分:0)

In the method badswap the var1 and var2 that 

被打印是所述方法的局部变量即

badswap( int var1,int var2

and not that of class variables 

public static int var1,var2

这就是差异的原因。

答案 3 :(得分:0)

static个字段与某个类相关。 this关键字通常用于区分同名的局部变量和类变量。建议避免使用它来引用静态字段,因为这是不必要的,但编译器似乎接受它。

此外,var1和var2仅存在于badSwap()方法的范围内。这就是为什么你得到不同的输出。方法中的sysout显示参数值,而main中的sysout显示类变量的值。