A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 迷失的独白 于 2014-8-14 22:45 编辑

这是一个关于创建对象的问题
大家都知道
String str = "abc";str在内存中有一个字符串对象
String str1 = new String("abc");str1在内存中两个字符串对象

那么我有一个关于创建数组的问题
int[] arrs1 = {0,1,2,3,4};
int[] arrs2 = new int[5];
int[] arrs3 = new int[]{0,1,2,3,4}
三个数组在内存中的区别,分别有几个对象

还有一个数组的问题
int[][] arrs4 = {{3,2,5,8},{2,9},{3,4}}
这个数组创建了几个对象
我在别的地方查到了不一样的答案,我感到很困惑
一、四个对象,三个一维数组对象和一个二维数组对象的引用
二、八个对象,首先是4个java.lang.Class对象:分别是[I和[[I,还有java.lang.Object.class,

java.io.Serializable.class,然后是三个一维数组对象和一个二维数组对象
三、十个对象,3,2,5,8,9,4,{3,2,5,8},{2,9},{3,4},{{3,2,5,8},{2,9},{3,4}}
四、按照以上的综合一下,个人理解就有十四个对象
这个实在是困惑死了,希望有人能够解答我心中的疑惑

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

正序浏览
数组也是我的弱项  看来得多看看了。。。
回复 使用道具 举报
迷失的独白 发表于 2014-8-15 09:33
理解了,还是第一个问题
String str = "abc";一个对象
String str1 = new String("abc");两个对象

我觉得没问题
我也是新手
回复 使用道具 举报
李国荧 发表于 2014-8-15 09:19
关于第一个问题
arrs1、arrs2、arrs3是3个基本数据类型(int)的数组,也就是说数组里存储的是int类型的值 ...

理解了,还是第一个问题
String str = "abc";一个对象
String str1 = new String("abc");两个对象
int[] arrs1 = {0,1,2,3,4};一个对象
int[] arrs3 = new int[]{0,1,2,3,4}一个对象
我这样理解没问题吧
回复 使用道具 举报 0 1
关于第一个问题
arrs1、arrs2、arrs3是3个基本数据类型(int)的数组,也就是说数组里存储的是int类型的值,而不是一个引用。
系统会为arrs1、arrs3各分配5个单元(共20个字节)的内存空间,并赋初值为0、1、2、3、4;也会为arrs2分配5个单元(共20个字节)的内存空间,但初始值因变量定义位置的不同而不同。
3个数组在内存中各有1个对象。

第二个问题好复杂啊
先说一下数组本身,这是一个二维数组,也就是说arrs4是一维数组的数组。
你定义了一个数组,它的元素又是一维数组。一维数组是一种引用类型的变量,也就是说实际的数组对象会被保存在堆内存中,而我们定义的变量仅仅保存了一个引用。
所以当定义完arrs4时,内存中会有3个int类型的一维数组+1个一维数组类型的数组。

再说说class对象(我也不太了解)
“类”是现实中的对象在内存中的描述,那“类”这个概念在内存中的描述是什么呢?就是clas对象。
当我们首次使用某个类时,系统必须知道这个类是什么样的,系统就会加载这个类对应的class文件,并创建一个class对象来代表这个类。
不管你使用的是java提供的对象还是自定义对象,系统都会在你使用之前先为这些类创建对应的class对象。
Object是所有类的父类,创建子类时回调用父类的构造器、初始化块,所以系统必须了解Object类,系统中肯定有它对应的class对象。
Serializable接口,int和数组类型的数据都能序列化,说明它们直接或间接的实现了Serializable接口,使用子类对象时系统会去了解它的所有父类和接口,也就会创建相应的class对象。

如果加上class对象的话,我也不知道有多少个对象了。
不过4个数组对象是肯定有的;class对象也是肯定有的,不过不清楚有多少个;但是int是基本数据类型,直接在数组中存储对应的值,不会创建对象(如果你用new Integer(1)的形式的话那就有对象了)。

我觉得吧,这儿如果考虑class对象的话就太复杂了。

有不对的地方,欢迎指正,感激不尽。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马