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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youcyou 中级黑马   /  2014-9-15 14:08  /  1294 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
public class Test1 {

        String s = new String("good");
        char[] ch = { 'a', 'b', 'c' };
        Person person = new Person("zhangsan", 11);

        public static void main(String args[]) {
                Test1 t = new Test1();
                t.changer(t.s, t.ch, t.person);
                System.out.println(t.s);
                System.out.println(t.ch);
                System.out.println(t.person);
        }

        private void changer(String s2, char[] ch2, Person person) {
                // TODO Auto-generated method stub
                s = "ok";
                ch[0] = 'g';
                person = new Person("lisi", 22);

        }
}
输出结果如下:
ok
gbc
Person [name=zhangsan, age=11]

求解释

8 个回复

倒序浏览
代码不全吧 Person怎么定义的,全部发上来再看看
回复 使用道具 举报
Fightin黑马 发表于 2014-9-15 17:50
代码不全吧 Person怎么定义的,全部发上来再看看

Person就是自己写的类   两个变量  两个构造函数 get set方法啥的
回复 使用道具 举报
人工置顶一下 吧,没人回复啊
回复 使用道具 举报
。。。。。。。。。。。。。。。
回复 使用道具 举报
楼主前面的2个打印结果应该是没问题的吧:
下面解释第3个打印结果:
  private void changer(String s2, char[] ch2, Person person) {
                // TODO Auto-generated method stub
                s = "ok";
                ch[0] = 'g';
                person = new Person("lisi", 22);
        }这是你的changer方法,但是这个方法中的语句:   person = new Person("lisi", 22); 它并不是改变了Test1类中的成员变量person的值,它改变的是 private void changer(String s2, char[] ch2, Person person)这个方法的参数中的person;也就是对象t 的person值还是Person("zhangsan", 11);
若要改变对象t中的person值可以在changer方法这样写 this.person = new Person("lisi", 22);
(当局部变量和成员变量名字相同时,使用this代表成员变量!)
回复 使用道具 举报
你给出的程序无法输出给出的结果,再确认一下代码是否对了。
回复 使用道具 举报
  1. public class Demo {

  2.         String s = new String("good");
  3.          char[] ch = { 'a', 'b', 'c' };
  4.          Person person = new Person("zhangsan", 11);

  5.         public static void main(String args[]) {
  6.                  Demo t = new Demo();
  7.                  t.changer(t.s, t.ch, t.person);
  8.                  System.out.println(t.s);
  9.                  System.out.println(t.ch);
  10.                  System.out.println(t.person.toString());
  11.          }

  12.         private void changer(String s2, char[] ch2, Person person) {
  13.                  // TODO Auto-generated method stub
  14.                  s = "ok";
  15.                  ch[0] = 'g';
  16.                 // person = new Person("lisi", 22);
  17.                                  person.name = "lisi";

  18.         }
  19. }
  20. // 输出结果如下:
  21. // ok
  22. // gbc
  23. // Person [name=zhangsan, age=11]
  24. //Person [name=lisi, age=11]
  25. class Person
  26. {
  27.         public String name = null;
  28.         public int age = 0;
  29.         public Person(String name,int age)
  30.         {
  31.                 this.name = name;
  32.                 this.age = age;
  33.         }

  34.         public String toString()
  35.         {
  36.                 return "Person [name="+name+", age="+age+"]";
  37.         }
  38. }
复制代码
回复 使用道具 举报
笑脸迷人 发表于 2014-9-15 22:06
楼主前面的2个打印结果应该是没问题的吧:
下面解释第3个打印结果:
  private void changer(String s2, ch ...

那么怎么处理才会让s的值也不改变呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马