当前位置: 代码迷 >> J2SE >> 为何这里要用两次new
  详细解决方案

为何这里要用两次new

热度:26   发布时间:2016-04-23 21:11:57.0
为什么这里要用两次new?
import java.util.*;

public class Test
{
public static void main(String[] args)
{
 Employee[] staff = new Employee[3];
 staff[0] = new Employee("abc", 3000, 1999, 10, 12);
// 为什么不这样写成staff[0] = ("abc", 3000, 1999, 10, 12); 
               //Employee就相当于一个int呀?
                                         
   int[] array = new int[3];
   array[0] = 1; //这里就没有再用new了。
 

}
}

class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month-1, day);
hireDay = calendar.getTime();
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public Date getHireDay()
{
return hireDay;
}

String name;
double salary;
Date hireDay;
}


一直觉得new 相当于C语言中的分配空间。

------解决方案--------------------
Employee[] staff = new Employee[3];
是对象数组,新对象肯定要new
int[] array = new int[3];
基本数据类型数组,基本数据类型本来就不用new


看来楼主还有很长的路要走!!!


------解决方案--------------------
如果Employee这一段用C写,那么staff变量应该是 Employee* [],staff[0]其实是一个对象指针。这是Java的规定,一切对象引用都是指针
------解决方案--------------------
数组是一个引用类型,要new

然后又因为数组的元素为对象,即类的实例,类也是引用数据类型,所以要new开辟内存空间
------解决方案--------------------
你申明数组的时候,类型时Employee的。当你在给数组staff[0]赋值的时候,用的new 相当于你调用的Employee的构造方法,创建了一个Employee的对象放在了数组的第一个位置,所以你用了2次new。我是这样理解的
  相关解决方案