发布此查询基本上了解像
这样的点对象是类实例或数组;
数组是Object
class;
除了原语之外的所有实例化都是Java中的对象。
以下是我在Java中使用数组的理解。
考虑以下计划,
/* dummy.java */
class C {
private int i;
public C() {
i = 1;
System.out.println("Am in constructor");
}
}
public class dummy {
public static void main(String[] args) {
C[] c = new C[2]; // Line 11
c[0] = new C();
System.out.println(c);
}
}
运行后在运行时创建class [LC
类型的对象,
C[] c = new C[2]; //Line 11
在上面的代码中。 class [LC
是Object
类的直接子类。在上面的代码中运行c
后,引用变量Line 12
指向此对象(在下面的红色边界中显示)。引用变量位于堆栈中,类型为class C
的对象将进入堆中。
以上代码中line 11 & 12
的以下更改
C[][] c = new C[2][2];
c[0][0] = new C();
将表示如下所示。
我的理解是否正确?如果是,您能否详细解释运行时class [LC
在实例化对象时的使用情况?
注意:C[].class
给出了运行时的实际类型,即class [LC
。
答案 0 :(得分:1)
回答你的问题:是的,在Java(和C#)中,几乎所有内容都被分成多个由指针访问的离散内存块。这不仅包括您的二维数组,还包括对象内的任何嵌入对象。在C ++中,如果您有一个包含10个对象的数组(单维或不包含),并且每个对象包含10个嵌入对象,则可以使用一块记忆。在C#和Java中,对于存储所有这些(如果所有嵌入对象都是简单对象),在单维数组的情况下,您将至少有101个内存分配,而在多维数组的情况下则更多。
但是,这些内存的爆炸不应该被看作是一件非常糟糕的事情,因为它可以让你免于管理自己的内存分配,就像你可以使用C / C ++一样在大多数情况下,任何现代CPU的功能通常足以以足够的速度向前推进。