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