java中的变量

java中的变量,java,parameters,Java,Parameters,我是Java的初学者 为什么此代码正常工作: public class world{ static int i=1 public static void main(String args[]){ System.out.print(i+","); m(); m(); System.out.print(i);} public static void m(){ i+=2; }} 虽然此代码的工作方式不同: public class wor

我是Java的初学者

为什么此代码正常工作:

public class world{
 static int i=1
public static void main(String args[]){
 System.out.print(i+",");
          m();
          m();
System.out.print(i);}
public static void m(){
         i+=2;
}}
虽然此代码的工作方式不同:

public class world{
      static int i=1
public static void main(String args[]){
    System.out.print(i+",");
          m(i);
          m(i);
   System.out.print(i);}
public static void m(int i){
           i+=2;
}}

请解释这个问题。

您的问题是您在第二个块中声明了一个与静态变量同名的局部变量

所以
i
in
i+=2正在更新传递给方法的
i
,而不是静态字段

因此每次调用
m(i)
i
更新为3,然后不对其执行任何操作。通过添加
System.out.println(i)进行确认到方法,它们都将打印
3

如果要在第二种方法中更新静态变量,可以使用
world.i+=2


该学习如何解释这个问题了-你的问题在哪里?你只能在一个.java文件中使用公共类。@suvojit_007我不认为他实际上在同一个文件中使用了两个类,他只是向我们展示了两个不同的文件。现在可以了,但是在编辑之前有两个公共类。在你的例子中,为什么我们必须调用ideone.i+=2,而第一个块只有i+=2。请解释这些。第二个块的输出是1,1,但为什么你说它是1,3?@Tilak我解释过第二个块的情况。方法更新传递给它的
i
,而不是
static int i
。非常感谢。我现在可以理解了。我想再澄清一次。为什么方法更新我在第一个块中传递给静态i的变量,而不是在第二个块中的变量。@在第一个块中,你不传递任何东西给
m()
,然后
i+=2
更新
static int i
,在写入
m(i)
时,在第二秒内传递
static int i
的值,该方法将
int i
作为参数,然后
i+=2
更新传递给它的
int i
,而不是
静态int i
。有一个谷歌的局部变量隐藏字段或读取。