2015-03-27 1 views
0

У меня есть код в моей заявке на много мест. Я использую его для подготовки SQL-запросов.Должен ли я использовать StringBuilder или нет?

Подход 1:

private String sampleMethod(String name) { 
    //null check 
    StringBuilder sb = new StringBuilder("Welcome "); 
    sb.append(name); 
    sb.append(", Have a good day!"); 
    //System.out.println(sb.toString()); 
    return sb.toString(); 
} 

подход 2:

private String sampleMethod(String name) { 
    //null check 
    //System.out.println("Welcome " + name + ", Have a good day!"); 
    return "Welcome " + name + ", Have a good day!"; 
} 
  1. Какой подход следует использовать?
  2. Имеет ли значение одинаковое использование памяти?

спасибо.

+2

AFAIK - Второй подход автоматически преобразуется в первый компилятор. Один из вариантов использования 'StringBuilder' был бы, если бы вы выполняли конкатенацию String в цикле – MadProgrammer

+0

@MadProgrammer, спасибо. Понимал вашу мысль. –

+1

Пожалуйста, обратитесь: http: //stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java – Prabhaker

ответ

1

Внутренне оба подхода почти одинаковы. Используйте то, что делает ваш код более легким для чтения и обслуживания. Беспокоитесь по поводу потребления и производительности памяти только тогда, когда у вас есть проблемы в этом отношении. Это будет намного меньше, чем вы думаете.

+0

Поскольку я не очень хорошо знаю, как работает компилятор, спасибо за указание, что внутри оба подхода одинаковы. –

1

В современных версиях Java компиляторов, идиомы:

String x = a + b + c; 

внутренне преобразуется в:

String x = new StringBuilder().append(a).append(b).append(c).toString(); 

так, если вы работаете с очень старым компилятором, как бы практически тоже самое.

Это не значит, что StringBuilder больше не полезен, он все еще может использоваться в for и while петлях.

+0

Спасибо, что объяснили, как он преобразуется компилятором. –

0

Stringbuilder не создает объект, в этом случае использование памяти лучше. Но String do re создает объект. Кроме того, обе функции одинаковы.

 Смежные вопросы

  • Нет связанных вопросов^_^