假设我们有一个包含1000个String常量的类Const.java
:
public static final String foo1 = "foo1";
public static final String foo2 = "foo2";
...
public static final String foo1000 = "foo1000";
现在,另一个类中的某些方法执行
String s = Const.foo1000;
变量的访问时间是否取决于这些变量的数量?
(也就是说,如果Const.java
中有1,000,000个字符串,代码会以相同的速度运行吗?)
答案 0 :(得分:2)
访问时间将始终相同。
应用程序启动时,使用类加载器将类加载到RAM内存中。常量(静态/最终)存储在一个内存位置,无论在何处使用,都会在代码中替换。
您应该注意的唯一区别是在申请的开始时间,这将与您在课堂上的变量数量成比例。
访问内存位置始终为O(1),就像从HashMap中检索对象一样。
答案 1 :(得分:2)
是的,它会以相同的速度运行。一个重要的原因是常量都是在编译时解决的,而不是在运行时解决。
在编译代码时,会分析任何静态最终字段,这些字段仅由文字或其他静态最终字段的值组成,这些字段仅由文字组成。事实上,如果您要对该分配进行反编译,您会看到:
String s = "foo1000"; // No reference whatsoever to Const