我们可以确定ArrayList<E>使用其公共方法的长度size(),例如
ArrayList<Integer> arr = new ArrayList(10);
int size = arr.size();
Run Code Online (Sandbox Code Playgroud)
类似地,我们可以Array使用length属性确定对象的长度
String[] str = new String[10];
int size = str.length;
Run Code Online (Sandbox Code Playgroud)
虽然size()方法ArrayList是在ArrayList类中定义的,但是这个length属性是在哪里Array定义的?
我想知道lengthJava数组的实现.我知道using arrayName.length使我们得到了数组中元素的数量,但是想知道这是一个方法/函数还是只是Array的数据成员?
我想它必须是一个数据成员,因为我们()在调用它时不使用括号.但是,如果它是一个数据成员,该length指定/计算的值是如何/何时?
这是java包树:http: //docs.oracle.com/javase/7/docs/api/java/lang/package-tree.html
我读了一篇关于Java的教程,该教程表明在Java数组中是对象.
数组类在哪里?为什么我们可以制作这样的数组:
byte[] byteArr = new byte[];
char[] charArr = new char[];
int[] intArr = new int[];
Run Code Online (Sandbox Code Playgroud)
并且数组将从Object继承方法; 例如:
byte thisByte = 1;
byte thatByte = 2;
byte[] theseBytes = new byte[] {thisByte, thatByte};
int inheritance = theseBytes.length; //inherited 'length' field and some methods
int wasntInWill = thatByte.length; //error
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
编辑:
根据答案,我现在知道它是一个包装final类java.lang.reflect.
我现在已经java.lang.reflect在我的Android项目中创建了一个包,并为其添加了一个名为Array.java的类.为了确认这是原始类的方式,Eclipse给了我错误"...已存在于path/to/android.jar"
如果我写出同一个类,java.lang.reflect.Array但改变toString()方法......这应该在我的应用程序中正常工作吗?
在马丁·汤普森的"95%的表现是关于清洁的代表性模型"谈话中,在17到21分钟之间,这样的代码被呈现:
public class Queue
{
private final Object[] buffer;
private final int capacity;
// Rest of the code
}
Run Code Online (Sandbox Code Playgroud)
在20:16他说:
你可以获得更好的性能,所以留下像这样的东西
capacity是正确的.
我试图提出一个代码示例,其capacity速度会快得多buffer.length,但我失败了.
马丁说两个场景中出现问题:
length字段也是final,JLS 10.7.所以,我不知道这可能是一个什么问题.capacityVS buffer.length一百万次(具有元素一百万队列),但没有显著差异.我使用JMH进行基准测试.能否请您提供一个代码示例,该示例演示了一个capacity优于buffer.length性能的案例?
更常见的情况(经常在实际代码中发现)越好.
请注意,我完全取消了美学,清洁代码,代码重新分解等方面的内容.我只询问性能.
在Java中,array是一个类并扩展了Object.我很想知道这个特殊的数组类.我没有在任何地方找到类定义.执行getClass().getName()会得到奇怪的结果.
String[] array = new String[]{"one","two"};
System.out.println(array.getClass().getName()); // prints [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我想了解阵列是如何工作的.数组类定义是否在JVM中进行了硬编码?
任何资源,书籍,链接都会有所帮助.
谢谢.
发布此查询以基本上了解诸如
对象是类实例或数组;
数组是类的子Object类;
在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
类型的对象class [LC在运行后在运行时创建,
C[] c = new C[2]; //Line 11
Run Code Online (Sandbox Code Playgroud)
在上面的代码中。class [LC是类的直接子Object类。在上面的代码中c运行后,引用变量指向这个对象(如下图红色边界所示)Line 12。引用变量位于堆栈中,类型的对象class …
java ×6
arrays ×5
object ×2
caching ×1
concurrency ×1
jvm ×1
new-operator ×1
performance ×1
runtime ×1