【发布时间】:2021-04-09 06:53:00
【问题描述】:
对不起,如果这是一个非常愚蠢的问题,但是听到“Java 数组实际上只是对象”,我觉得它们需要有一个预定义的长度是没有意义的?
我理解为什么原始类型会这样做,例如int myInt = 15; 分配 32 位内存来存储整数,这对我来说很有意义。但如果我有以下代码:
class Integer{
int myValue;
public Integer(int myValue){
this.myValue = myValue;
}
}
后跟Integer myInteger = new Integer(15);myInteger.myValue = 5;,那么我可以在myInteger 中存储的数据量没有限制。它不限于 32 位,而是一个指向 Object 的指针,它可以存储任意数量的 ints、doubles、Strings 或任何东西。它分配了 32 位的内存来存储指针,但对象本身可以存储任意数量的数据,不需要事先指定。
那么为什么数组不能做到这一点呢?为什么我需要事先告诉数组要分配多少内存?如果一个数组“实际上只是一个对象”,那我为什么不能简单地说String[] myStrings = new String[];myStrings[0] = "Something";?
我是 Java 的超级新手,所以有 100% 的机会这是一个愚蠢的问题,并且有一个非常简单明了的答案,但我很好奇。
另外,再举一个例子,我可以说ArrayList<String> myStrings = new ArrayList<String>();myStrings.add("Something"); 没有任何问题...那么是什么让 ArrayList 与数组不同?为什么需要告诉数组分配多少内存,而 ArrayList 不需要?
提前感谢任何花时间填写我的人。:)
编辑:好的,到目前为止,cmets 中的每个人都误解了我的帖子,我觉得用词错误是我的错。 我的问题不是“我如何定义一个数组?”,或者“改变一个变量的值会改变它的内存使用吗?”,或者“指针是否存储了它们指向的对象的数据?”,或者“是数组吗?”对象?”,也不是“ArrayLists 如何工作?” 我的问题是,当我制作一个数组时,我为什么需要告诉它它指向的对象有多大,但是当我制作任何其他对象时,它会自行缩放而我没有预先告诉它任何东西? (以 ArrayLists 为例)
我希望现在这更有意义...我不确定为什么每个人都误解了? (我是不是说错了什么?如果有,请告诉我,我会更改它以方便其他人使用)
【问题讨论】:
-
Java 数组是对象
Object o = new int[] {1,2,3};- 这是一个长度为 3 的数组。为什么?因为它可以容纳三个元素。不再。不少于。Object o = new int[4];是一个由四个元素组成的数组(全部为0)。 -
汽车和飞机都是“交通工具”。但是,我的车不会自动飞行。
-
"那么我可以在 myInteger 中存储的数据量没有限制"。真的吗?告诉我如何在其中存储整数 2^50。 (注意:您需要超过 32 位才能做到这一点)。我很确定它只能存储
int。 -
我感觉 OP 将数字 32 与 32 位混淆了。但是有很多(表面上)不正确的事实和假设,很难知道 OP 的问题是在他的知识中还是在他的知识的书面表达中。
-
啊,是的。我不应该为
ints 分配32的值,这只是混淆了事情。我使用 32 作为占位符数字,但现在每个人都认为我把它放在那里是为了表示 32 位......我会编辑它。
标签: java arrays object arraylist