求教大牛们关于java自定义数组!!!!

bigdogLIU 2017-07-17 06:33:50
这是我的自定义的类型
package webtalk;

public class userbean {
public int userip;
public String username;
public int usersoc;
public boolean coonect=false;
}
/////////////////////////////////////////////////////////////
userbean[] u=new userbean[5];
for(int i=0;i<5;i++)
{
u[i]=new userbean();//就是这!!!!
u[i].userip=(i+1);;
u[i].username=("用户"+(i+1));
u[i].usersoc=(1025+i);
u[i].coonect=false;
}
求助各位为什么上面已经申请过空间了,为什么下面还要再对数组中的每个成员new一次????
...全文
477 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇湘如梦 2017-07-26
  • 打赏
  • 举报
回复
你可以想象为声明数组的时候实际上只是占了几个坑,但是坑里面是空的
  • 打赏
  • 举报
回复
所有对象都是引用, 你如果不每new一个对象再放进数组的话 数组的5个元素指向的都是同一个地方,所以你前面改的东西都给后面改的覆盖饿了
戴小码 2017-07-21
  • 打赏
  • 举报
回复
对象数组中当然存放对象啦!你不创建对象如何存放对象?
hml1993 2017-07-18
  • 打赏
  • 举报
回复
userbean[] u=new userbean[5];//这句是动态数组初始化,引用类型的动态初始化为null,没有引用,也就是u[0]~u[4] = null;没有引用对象空间,后面再new对象赋给数组元素,相当于每个元素都储存userbean的不同对象的引用地址,所以第一次new只是创建了数组,每个元素还是null
Abin0406 2017-07-18
  • 打赏
  • 举报
回复
引用 6 楼 bigdogLIU 的回复:
[quote=引用 1 楼 qq_26367235 的回复:] java对复合数据类型的访问都是采用引用方式,new userbean[5]只是申请了5个存放“userbean”数据类型的引用的空间。这时候你并没有创建“userbean”数据类型的实例,所以就有了后面的“u[i]=new userbean()”。 记住 userbean[]不是userbean。
再次求教大牛们,为什么int u[]=new int[5];我使用for循环赋值就不用再一一给u[i]实例化就可以使用?[/quote] 基础数据类型是有默认值的,int u[]=new int[5]会默认u[i]=0,而引用类型如果不new,将会是个null值
bigdogLIU 2017-07-18
  • 打赏
  • 举报
回复
引用 7 楼 Chenxc90 的回复:
[quote=引用 6 楼 bigdogLIU 的回复:] [quote=引用 1 楼 qq_26367235 的回复:] java对复合数据类型的访问都是采用引用方式,new userbean[5]只是申请了5个存放“userbean”数据类型的引用的空间。这时候你并没有创建“userbean”数据类型的实例,所以就有了后面的“u[i]=new userbean()”。 记住 userbean[]不是userbean。
再次求教大牛们,为什么int u[]=new int[5];我使用for循环赋值就不用再一一给u[i]实例化就可以使用?[/quote] 基本数据类型和引用数据类型的区别,基本数据类型不需要实例化. 之前你给你声明一个长度为5的某数据类型数组,然后需要实例化的该类型再放入数组. 但是基本数据类型是不需要实例化的.[/quote] 谢谢老哥!懂了!
  • 打赏
  • 举报
回复
引用 6 楼 bigdogLIU 的回复:
[quote=引用 1 楼 qq_26367235 的回复:] java对复合数据类型的访问都是采用引用方式,new userbean[5]只是申请了5个存放“userbean”数据类型的引用的空间。这时候你并没有创建“userbean”数据类型的实例,所以就有了后面的“u[i]=new userbean()”。 记住 userbean[]不是userbean。
再次求教大牛们,为什么int u[]=new int[5];我使用for循环赋值就不用再一一给u[i]实例化就可以使用?[/quote] 基本数据类型和引用数据类型的区别,基本数据类型不需要实例化. 之前你给你声明一个长度为5的某数据类型数组,然后需要实例化的该类型再放入数组. 但是基本数据类型是不需要实例化的.
bigdogLIU 2017-07-18
  • 打赏
  • 举报
回复
引用 1 楼 qq_26367235 的回复:
java对复合数据类型的访问都是采用引用方式,new userbean[5]只是申请了5个存放“userbean”数据类型的引用的空间。这时候你并没有创建“userbean”数据类型的实例,所以就有了后面的“u[i]=new userbean()”。 记住 userbean[]不是userbean。
再次求教大牛们,为什么int u[]=new int[5];我使用for循环赋值就不用再一一给u[i]实例化就可以使用?
尾号0505 2017-07-18
  • 打赏
  • 举报
回复
serbean[] u=new userbean[5]; // 声明数组并指定数组长度,这是数组对象,可以理解为一个装西瓜的盒子 u[0]=new userbean(); // 数组[0]的位置放入内容,这是数组内容对象,可以理解为放入西瓜对象
Abin0406 2017-07-17
  • 打赏
  • 举报
回复
u[i]=new userbean(); 对数组中的Object元素进行实例化,java对象在使用前必须先new出来才能使用
110成成 2017-07-17
  • 打赏
  • 举报
回复
userbean[] u=new userbean[5]; 创建对象数组,只建立了栈内存的地址空间,相当于引用。 u[i]=new userbean();//就是这!!!! 使用了new,相当于对象实例化,开辟堆内存空间,并将引用指向。
M义薄云天 2017-07-17
  • 打赏
  • 举报
回复
你放在for循环里当然要new五次
qq_26367235 2017-07-17
  • 打赏
  • 举报
回复
java对复合数据类型的访问都是采用引用方式,new userbean[5]只是申请了5个存放“userbean”数据类型的引用的空间。这时候你并没有创建“userbean”数据类型的实例,所以就有了后面的“u[i]=new userbean()”。 记住 userbean[]不是userbean。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧