第二个bbb方法中
String str="st2";相当于是新的string和public String str = "st1";没有关系,然后他的生命周期也在这个方法里
所以调用aaa的时候用的是public String str = "st1"这个string,结果就是str2,str1

解决方案 »

  1.   

    变量作用域问题:成员变量public String str = "st1";的作用域是对象,局部变量String str="st2";的作用域是方法内部。小作用域的变量会覆盖大作用域的变量,因此,在bbb()方法内部使用str,实际使用的是st2这个变量,在aaa()方法内部使用str时,bbb()内的str已经超出了作用域,因此使用的是成员变量st1
      

  2.   


    第一个为什么不起作用
    第一个把String str="st2";这个作为参数传给了aaa这个方法,所以都是str2
      

  3.   


    也就是说
     
    将 public void aaa(){
    bbb();
    }
    public void bbb(){
    system.out.println("123");
    }成
    public void aaa(){
    sy
    看stem.out.println("123");
    }
    是错误的,即一个方法A调用另外一个方法B,不能看成B方法的代码在A中运行?
      

  4.   


    这个我明白,但是第二个bbb方法在aaa方法内,没有用aaa的变量。 bbb在aaa方法内啊,不能用aaa的局部变量,所以我有些疑惑
      

  5.   


    这个我明白,但是第二个bbb方法在aaa方法内,没有用aaa的变量。 bbb在aaa方法内啊,不能用aaa的局部变量,所以我有些疑惑aaa在bbb方法内吧,你在bbb内声明了String str="st2";然后将str传递给aaa方法,结果当然是st2了
      

  6.   


    也就是说
     
    将 public void aaa(){
    bbb();
    }
    public void bbb(){
    system.out.println("123");
    }成
    public void aaa(){
    sy
    看stem.out.println("123");
    }
    是错误的,即一个方法A调用另外一个方法B,不能看成B方法的代码在A中运行?A调用B,你可以理解为B的代码写进A里面了,调用过程看起来是这样的,但实际情况并非如此,一个方法调用,是将原方法上面压了一个新的方法调用,整个过程有自己的方法调用栈,变量什么的都是重新分配空间,不共享局部变量的。
      

  7.   

    第一个 : 调用bbb方法,先打印一遍str="st2",然后在bbb中调用aaa方法,由于str在bbb中,再次赋值,以最后一次为最终值,故aaa中打印的 也是str="st2"
    第二个: 调用bbb方法,先打印一遍str="st2",然后在bbb中调用aaa方法,aaa方法没有参数,所以方法中str还是原来的,aaa中打印的 是str="st1"