拳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);
}
}
答案 0 :(得分: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.var1
和swapex.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显示类变量的值。