创建单独的常量文件(如下面的“常量”类)直接写入stringVar.equals("name")
等Java文件的整体优势(在内存管理方面等)是什么?
public final class Constants {
// Hide the constructor
private Constants(){}
public static String NAME="name";
}
我知道即使我们写了2次使用“name”(如下所示),在String池中只会创建一个文字吗?
stringVar1.equals("name")
和stringVar2.equals("name")
答案 0 :(得分:3)
一个原因是重复使用它(因此可以防止错别字错误)。
如果您使用的是IDE,与普通字符串搜索相比,以更加非模糊的方式执行使用情况查找变得更加容易。
评论中已经注意到的另一个是记忆,但正如我所看到的,上述两个原因更为重要 - 一般用法。我的不好。 Looks like memory has not much to do with it - atleast in case of static-final fields 。
答案 1 :(得分:2)
这与效率无关;这是关于可维护性的。
常量在一个地方定义值"name"
,并将常量名称(您选择NAME
)与它相关联。
在您的示例中,常量名称不会告诉我们任何内容。但它可能是,例如,public static String FIRST_NAME_FIELD = "name"
。然后,在Constants类和每次使用中,字符"name"
的含义都会更清楚。
当然,如果您稍后需要将"name"
更改为"first_name"
,则会更容易。
答案 2 :(得分:1)
性能方面,java倾向于在String池中重用字符串。
通常在您知道值不会改变或不得被其他任何人更改时使用常量。
对于常量,您必须将final
添加到变量声明:
public static final String NAME="name";
常量与更好的编码,组织和重用比与性能更相关。