黑马程序员技术交流社区

标题: 变量赋值问题 [打印本页]

作者: youcyou    时间: 2014-9-15 14:08
标题: 变量赋值问题
代码如下:
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]

求解释


作者: Fightin黑马    时间: 2014-9-15 17:50
代码不全吧 Person怎么定义的,全部发上来再看看
作者: youcyou    时间: 2014-9-15 20:22
Fightin黑马 发表于 2014-9-15 17:50
代码不全吧 Person怎么定义的,全部发上来再看看

Person就是自己写的类   两个变量  两个构造函数 get set方法啥的
作者: youcyou    时间: 2014-9-15 21:42
人工置顶一下 吧,没人回复啊
作者: 曾小贤OL    时间: 2014-9-15 21:58
。。。。。。。。。。。。。。。
作者: 笑脸迷人    时间: 2014-9-15 22:06
楼主前面的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代表成员变量!)

作者: 李春丽    时间: 2014-9-15 22:07
你给出的程序无法输出给出的结果,再确认一下代码是否对了。
作者: 李春丽    时间: 2014-9-15 22:17
  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. }
复制代码

作者: youcyou    时间: 2014-9-16 00:00
笑脸迷人 发表于 2014-9-15 22:06
楼主前面的2个打印结果应该是没问题的吧:
下面解释第3个打印结果:
  private void changer(String s2, ch ...

那么怎么处理才会让s的值也不改变呢




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