2017-02-17 21 views
0

Каково общее преимущество (с точки зрения управления памятью и т. Д.) Создания отдельного файла констант, например, под классом «Константы», поверх прямой записи в файле Java, например stringVar.equals("name")?Строковый литерал в сравнении с файлом констант в java

public final class Constants { 
    // Hide the constructor 
    private Constants(){} 
    public static String NAME="name"; 
} 

Я знаю, что даже если мы пишем использовать «имя» в 2 раза (как показано ниже), только один литерал будет создан в Струнный бассейне?

stringVar1.equals("name") и stringVar2.equals("name")

+9

Этот вид вещей не выполняется для целей управления памятью. – user2357112

+1

Класс констант - это антипаттерн. Не делай этого. Вместо этого поместите свои константы в класс, к которому они относятся. Например, [Pattern.DOTALL] (http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL), а не PatternConstants.DOTALL. – VGR

ответ

1

Это не об эффективности; это касается ремонтопригодности.

Константа определяет значение "name" в одном месте и связывает постоянное имя (вы выбрали NAME).

В вашем примере постоянное имя ничего нам не говорит. Но это может быть, например, public static String FIRST_NAME_FIELD = "name". Тогда было бы более понятно, как в классе Constants, так и при каждом использовании, что означает строка "name".

И, конечно, если вам нужно изменить "name" на "first_name", то это будет проще.

3

Одной из причин было бы повторное использование (и, как следствие, предотвращение ошибок от опечаток).

Если вы используете IDE, вам также проще выполнять поиск по потреблению немного более недвусмысленно, чем простой поиск строк.

Другие, как уже отмечалось в комментарии, были бы памятью, но, как я вижу, эти две причины гораздо важнее - в общем использовании. Мой плохой. Looks like memory has not much to do with it - atleast in case of static-final fields.

+0

Я хочу поддержать это, за исключением последнего абзаца. Он не имеет ничего общего с памятью и практически не влияет на нее. Единственный эффект - это организация и ремонтопригодность. Определенно не хочу, чтобы начинающие Java-программисты начали бросать все свои константы в выделенный файл в неподходящих ситуациях, потому что они думают, что это как-то влияет на производительность! –

+0

Я думаю, вы правы. –

1

Производительность мудрый, java, как правило, повторно используется Строки в String pool.

Константы обычно используются, когда вы знаете, что значение не изменится или не должно быть изменено кем-либо еще.

Для постоянной вы должны добавить final к вам объявления переменной:

public static final String NAME="name"; 

Константы больше связаны с лучшей кодирования, организации и повторного использования, чем производительность.