Java 为什么输出不一样?

Java 为什么输出不一样?,java,string,swap,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()的输出与第二个
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);
    }
}

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

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

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);
当地人正在印刷

回到main,行:

System.out.println("var1 " + var1 + " var2 "+ var2);
解析为静态字段,因为没有具有这些名称的堆栈变量。同样,这也是一种糟糕的风格。您可以使用
swapex.var1
swapex.var2


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

在badswap中设置的变量是局部参数,而不是swapex的静态成员。由于本地作用域优先,因此静态成员不变

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

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

gets printed是所述方法的局部变量,即

坏帐交换(int-var1,int-var2

公共静态int var1、var2


这就是差异的原因。

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


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

这是否编译?这个.var1是什么
var1
是一个静态类变量,是一个局部参数,而不是实例成员。无论如何,使用
this.var1
的游戏是本地的,不做任何事情,因为您打印的是
val1
,而不是
this.var1
。Kobi、this.var1和var1在main中都是指静态字段。这绝对是一种糟糕的风格,真的吗<代码>此
适用于静态字段?当我学习Java时是
swapex.var1
。提示:用大写字母开始类名。它可以很方便地一目了然地区分类/方法/变量,并且可以避免您从其他程序员那里看到奇怪的外观。这是错误的。badswap设置静态变量,但打印(未更改的)局部变量。然后,稍后,打印(交换的)静态数据。
In the method badswap the var1 and var2 that 
and not that of class variables