Я пытаюсь реализовать отсортированный список как простое упражнение на Java. Чтобы сделать его универсальным, у меня есть add (Comparable obj)
, поэтому я могу использовать его с любым классом, реализующим интерфейс Comparable.
Но когда я использую obj.compareTo (... )
где-нибудь в коде я получаю "неконтролируемый вызов compareTo (T) как член необработанного типа java.lang. использование памяти и скорость) использования этого подхода вместо объявления String как final и замены всех литералов конечной переменной?
Например (хотя, очевидно, это не настоящее слово):
private static final String FINAL_STRING = "foo";
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println(FINAL_STRING);
}
}
Versus:
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println("foo");
}
}
Which является предпочтительным и почему (при условии, что строковое значение останется постоянным)?
Приведет ли приведенный выше (второй) пример к созданию 10 строковых объектов или JVM поймет, что фактически используется только один литерал, и создаст единственную ссылку . Если да, то есть ли какое-либо преимущество для объявления String как final (как в первом примере)?
Если интерпретируемый код действительно заменяет строковый литерал одной ссылкой, применяется ли это, если тот же литерал встречается более чем в одно место:
public void stringPrinter(){
for(int i=0;i<5;i++){
System.out.println("foo"); // first occurence
System.out.println("foo"); // second occurence
}
}