黑马程序员技术交流社区

标题: 对象和方法的调用 [打印本页]

作者: 杨千里    时间: 2012-9-15 01:51
标题: 对象和方法的调用
本帖最后由 杨千里 于 2012-9-15 13:20 编辑

public class Example{
         String str=new String("good");            
         char[] ch = {'a','b','c'};                       
         public void change(String str,char ch[])
        {            
          str="test ok";
          ch[0]='g';
        }

         public static void main(String args[])
        {
          Example ex=new Example();            
          ex.change(ex.str,ex.ch);         //调用change()方法      
          System.out.print(ex.str+" and ");
          Sytem.out.print(ex.ch);
      }
}

结果不应该是   test ok   and gbc  吗?  但为什么结果是good and gbc  ? 搞了半天弄 不明白,请解释  谢谢

作者: 王得新    时间: 2012-9-15 10:51
public class Example{
    String str=new String("good");            
     char[] ch = {'a','b','c'};                       
     public void change(String str,char ch[])
    {            
     this.str="test ok"; //这样就行了,this.str调用的是外面的str,这里是把外面的引用str,指向了“test ok”
                              //str=“test ok”;这里的str    是change(String str,char ch[]))函数中的str,是形参,只是在函数里有用,出了函数就拜拜了

     ch[0]='g';
   }
    public static void main(String args[])
    {
     Example ex=new Example();            
      ex.change(ex.str,ex.ch);         //调用change()方法      
      System.out.print(ex.str+" and ");
     System.out.print(ex.ch);
}
}

作者: 田旭阳    时间: 2012-9-15 11:23
你没理解成员变量和局部变量。
作用范围。
成员变量作用于整个类中。
局部变量变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在this:看上去,是用于区分局部变量和成员变量同名情况。

this:是用于区分局部变量和成员变量同名情况。
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。


this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
  但凡本类功能内部使用了了本类对象,都用this表示。存在于栈内存中。


public class Example{
         String str=new String("good"); // 成员变量,作用于整个类Example
         char[] ch = {'a','b','c'};                       
         public void change(String str,char ch[])
        {            
          str="test ok"; //局部变量与成员变量相同时改为 this.str="test ok";因为this代表它所在函数所属对象的引用
          ch[0]='g';
        }

         public static void main(String args[])
        {
          Example ex=new Example();            
          ex.change(ex.str,ex.ch);         //调用change()方法      
          System.out.print(ex.str+" and ");
          Sytem.out.print(ex.ch);
      }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2