通过直接在Java文件中编写像stringVar.equals("name")
那样创建单独的常量文件(如下面的类“常量”)的整体优势(就内存管理等而言)是什么?我知道,即使我们使用“名称”2次(如下),只有一个文字会在字符串池中创建吗?字符串文字与java中的常量文件
stringVar1.equals("name")
和stringVar2.equals("name")
通过直接在Java文件中编写像stringVar.equals("name")
那样创建单独的常量文件(如下面的类“常量”)的整体优势(就内存管理等而言)是什么?我知道,即使我们使用“名称”2次(如下),只有一个文字会在字符串池中创建吗?字符串文字与java中的常量文件
stringVar1.equals("name")
和stringVar2.equals("name")
这不是效率;这涉及可维护性。
该常数在一个地方定义值"name"
,并将常数名称(您选择NAME
)与它相关联。
在你的例子中,常数名不会告诉我们任何东西。但它可能是,例如,public static String FIRST_NAME_FIELD = "name"
。然后,在Constants类和每次使用中都会更清楚地知道字符串"name"
的含义。
而且,当然,如果您稍后需要将"name"
更改为"first_name"
,则更容易。
其中一个原因是重用它(并因此防止错误发生)。
如果您正在使用IDE,那么以比纯字符串搜索更不含糊的方式执行使用情况查找变得更加容易。
另一个在评论中已经提到,将是记忆,但正如我所看到的,以上两个原因更为重要 - 一般用法。我的不好。 Looks like memory has not much to do with it - atleast in case of static-final fields。
除了最后一段,我想补充一点。它与记忆无关,对它几乎没有影响。它的唯一作用是组织和可维护性。绝对不希望开始Java程序员开始将其所有常量放在不适当的情况下的专用文件中,因为他们认为它会以某种方式影响性能! –
我想你是对的。 –
性能方面,java倾向于在字符串池中重用字符串。
常数通常用于知道值不会改变或不能被其他人改变的情况。
对于恒定必须添加final
你变量声明:
public static final String NAME="name";
常量是更关系到更好的编码,组织和重用,而不是性能。
这种事情不是由于内存管理的原因。 – user2357112
仅限常量的类是反模式。不要这样做。相反,把你的常量放在它们所属的类中。例如,[Pattern.DOTALL](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL),而不是PatternConstants.DOTALL。 – VGR