java有int 类型的数组,有String类型的数组,那为什么不能有类数组,今天在学习的时候,我是这么想的
就比如如果我定义这样一个类
public class Goods {
String name;
int price;
}
商品类,实际生活中,商品肯定是多个,而我总不能像这样
Goods g=new Goods();
Goods g1=new Goods();
一个个定义这些商品吧。
所以想到了数组
所以我试着这样写
Goods []g=new Goods[10]
就和普通定义数组那样,但运行的结果却是报错
public class Main {
public static void main(String[] args) {
Goods []g=new Goods[10];
g[0].price=10;
System.out.println(g[0].price);
}
}
Cannot assign field "price" because "g[0]" is null
at Main.main(Main.java:5)
g[0]是空的?
public class Main {
public static void main(String[] args) {
Goods []g=new Goods[10];
System.out.println(g[0]);
System.out.println(g);
}
}
null
[LGoods;@4eec7777
调试会告诉你g的
All elements are null
也就是说new并未开辟空间来存数组各个成原的内容,各成员的地址都是空址
查询网上正确写法为
public class Main {
public static void main(String[] args) {
Goods []g=new Goods[10];
for(int i=0;i<g.length;i++){
g[i]=new Goods();
}
System.out.println(g[0]);
System.out.println(g);
}
}
运行结果
Goods@3b07d329
[LGoods;@41629346
调试也会发现各个成员都有了地址,也就是都有了自己的空间。
可为什么一般数组一句话就行而类的数组似乎还要一句话一句话的为其开辟堆区的空间?
我想这应该是new底层原理的问题了,就不做探究了