黑马程序员技术交流社区

标题: 好像是关于变量的局部还是全局的问题。 [打印本页]

作者: 黑马-张洋    时间: 2013-2-26 10:56
标题: 好像是关于变量的局部还是全局的问题。
  1. package com.exam;

  2. public class test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 student s1=new student();
  8.                 System.out.println(s1.s);
  9.                 s1.Change(s1.s);
  10.                 System.out.println(s1.s);
  11.                
  12.         }




  13. }
  14. class student
  15. {       
  16.         String s=new String("未变前");
  17.         void Change(String s){
  18.                 s="变了后";       
  19.         }
  20.        
  21. }
复制代码
打印结果:两次都是”未变前“

为什么没有变
作者: 陈圳    时间: 2013-2-26 11:05
没变很正常,你要输出的就是
你想他改变应该在change()方法里加上这句:
this.s=s;

作者: 罗海云    时间: 2013-2-26 11:09
package com.exam;

public class test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                student s1=new student();
                System.out.println(s1.s);
                s1.Change(s1.s);
                System.out.println(s1.s);
               
        }




}
class student
{        
        String s=new String("未变前");
        void Change(String s){
                s="变了后";     //这儿你注意下.你赋值赋到形参上了....这样写就不出问题了.this.s = s;   
        }
        
}
作者: 黑马刘杰    时间: 2013-2-26 11:11
  1. void Change(String s){//这里s指向你传过来的对象“未变前”
  2.                
  3.                 //这里s指向一个新对象“变了后”,这句执行完,你的s1指向的堆内存中还是“未变前”,没有变。
  4.                 s="变了后";        
  5.         }
复制代码

作者: 夏振博    时间: 2013-2-26 11:19
这时候可以看出this关键字可以区分属性(全局变量)和局部变量,加this表示该变量为全局变量。
作者: vaanmax    时间: 2013-2-26 12:13
本帖最后由 vaanmax 于 2013-2-26 12:15 编辑

其实基本上大家都已经说明了你的问题了,我就附上刚才改了一下的代码,可以执行了,你看下吧。
package com.itheima;

public class da {

        /**
         * @param args
         */
        public static void main(String[] args) {
                student s1=new student();
                System.out.println(s1.s);
                s1.Change("改变了");
                System.out.println(s1.s);
               
        }




}
class student
{        
        String s = "未变前";
        String Change(String s){
               return this.s = s;        
        }
        
}








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