A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码
打印结果:两次都是”未变前“

为什么没有变

5 个回复

正序浏览
本帖最后由 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;        
        }
        
}



回复 使用道具 举报
这时候可以看出this关键字可以区分属性(全局变量)和局部变量,加this表示该变量为全局变量。
回复 使用道具 举报
  1. void Change(String s){//这里s指向你传过来的对象“未变前”
  2.                
  3.                 //这里s指向一个新对象“变了后”,这句执行完,你的s1指向的堆内存中还是“未变前”,没有变。
  4.                 s="变了后";        
  5.         }
复制代码
回复 使用道具 举报
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;   
        }
        
}
回复 使用道具 举报
没变很正常,你要输出的就是
你想他改变应该在change()方法里加上这句:
this.s=s;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马