0

拳头输出和第二拳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

4 回答 4

8

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

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

public void badSwap(int var1, int var2){

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

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

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

于 2010-04-06T05:30:37.620 回答
1

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

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

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

于 2010-04-06T05:33:49.313 回答
0
In the method badswap the var1 and var2 that 

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

坏交换(int var1,int var2

and not that of class variables 

公共静态 int var1,var2

这就是造成差异的原因。

于 2010-04-06T06:26:58.500 回答
0

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

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

于 2010-04-06T12:08:30.067 回答