package ch9;public class Employee { String str;

    public Employee(){
     System.out.println("Employee...");
    }
public Employee (String str){
System.out.println(str);
}
}======================================================
package ch9;public class TextEmployee { public static void main(String[] args) {

String textStr = "123"; Employee t = new Employee(textStr);
Employee[] e = new Employee[10];
for (int i = 0; i < e.length; i++)    
e[i] = new Employee("123");
for (int i = 0; i < e.length; i++)
e[i] = t;  }
}为什么我第二个for不能输出 10个"123"   结里只输出了一个"123"
请问:对象是怎么赋值的? 这里T是对象 e[i]也是对象 为什么只赋了一次 ???我是新手请大哥大姐帮忙~~~~

解决方案 »

  1.   

    每次执行new Employee(textStr)输出一个"123"第一次输出"123"
    Employee t = new Employee(textStr);第一个for输出10个"123"
    一共输出11个"123"第二个for没有输出
      

  2.   

    因为你的输出是在构造函数里输出传进构造函数的参数,而构造函数是在这个类用new关键字创建出一个对象的是构造函数才会被执行一次。所以请看Employee t = new Employee(textStr);
    这句代码new了一个Employee对象,所以这一行输出一个123;for (int i = 0; i < e.length; i++)    
    e[i] = new Employee("123");
    这个循环new了10个Employee对象,所以这一段输出10个123;for (int i = 0; i < e.length; i++)
    e[i] = t;
    而这里没有new任何对象,而只是把Employee t = new Employee(textStr);这一句new 出的对象t的引用赋值给了数组,而t已经是存在的对象,在赋值的过程中没有执行构造函数,所以这一段不输出任何内容;而不是你所说的输出一个123,是根本没有输出内容。
      

  3.   

    谢谢楼上大哥指点  基本懂你的意思了  
    不过  e[i] = t; 这个语句做了什么???   把t指向对象的地址赋给e[i]了吗??
      

  4.   

    是的,其实e[i]=t;相当于e[i]是指向对象t的一个指针,不过JAVA里没有指针,这里叫引用!
      

  5.   

    在你自己的帖子后面的管理
    √一个新手向各位高手问一个关于servlet的问题!望帮助一下!(cqhcl) 20 7 7-14 22:12 管理 ----后边有个管理,从这进去给分!