【问题标题】:Why the output is not same?为什么输出不一样?
【发布时间】:2010-04-06 05:21:15
【问题描述】:

第一个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);
    }
}

【问题讨论】:

  • 这还能编译吗? this.var1 是什么? var1 是一个 static 类变量,是一个局部参数,而不是实例成员。无论如何,this.var1 的游戏是本地的,什么都不做,因为你打印的是 val1,而不是 this.var1
  • Kobi、this.var1 和 main 中的 var1 都是指静态字段。这绝对是一种糟糕的风格。
  • 真的吗? this 适用于静态字段?我学Java的时候是swapex.var1...
  • 提示:类名以大写字母开头。一目了然地区分类/方法/变量很方便,它会避免你从其他程序员那里得到奇怪的外观。

标签: java string swap


【解决方案1】:

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

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

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);

正在打印当地人。

回到main,一行:

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

解析为静态字段,因为没有具有这些名称的堆栈变量。同样,这也是糟糕的风格。你可以使用swapex.var1swapex.var2

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这是错误的。 badswap 正在设置静态变量,但打印(未更改的)本地变量。然后,稍后,打印(交换的)静态数据。
    【解决方案3】:
    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

    这就是造成差异的原因。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        相关资源
        最近更新 更多