JAVA:变量采用不同的值

时间:2017-09-21 03:15:34

标签: java

public class Agn {
    int y=33;

    public static void main(String[] args){

       Agn a = new Agn();
       a.disp();
       System.out.println(a.y);
    }

    void disp (){
       Agn a = new Agn();
       y=44;
       System.out.println(a.y); 
       System.out.println(y);
    }
}

在上面的代码中,System.out.println(a.y)打印 44 System.out.println(y)打印 33 。 在main方法中使用时,相同的语句System.out.println(a.y)会打印 44 。为什么会有区别?不应该 44 总是吗?

3 个答案:

答案 0 :(得分:0)

a中的对象disp()是一个不同的对象(不要被同一个别名a伪装,而且我不知道你为什么要这样做 - @ ElliottFrisch的评论很好地解释了它,因此你得到了不同的价值观。修改您的disp(),以便类似:

class Agn
{
    int y = 33;
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        Agn a = new Agn();
        System.out.println(a.y);
       a.disp();
       System.out.println(a.y);
    }

void disp (){

   y=44;
   //System.out.println(a.y); 
   System.out.println(y);
}
}

Output would be:

<强> 33 44 44

正如你所期待的那样

答案 1 :(得分:0)

public class Agn {
int y=33;

public static void main(String[] args){

   Agn a = new Agn();//create local  object in main method  effect on  instance variable
   a.disp();
   System.out.println(a.y);
}

void disp (){
   Agn a = new Agn();//create local object not effect on  instance variable
   y=44; //you can mark y variable as static 
         //then you get output same
   System.out.println(a.y);  
   System.out.println(y);

   Agn a2 = new Agn(); // same create local object not effect on  instance variable 
   System.out.println(a2.y);//same o/p
}

}

答案 2 :(得分:0)

下面:

Agn a = new Agn();
y=44;

后者与:this.y = 44

相同

换句话说:代码中有两个 Agn个对象。 main()方法创建的方法 - 以及disp()方法创建的另一个方法。两个对象,即两个不同的y字段 - 可以包含不同的内容。

这就是全部。