Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

String concat java

4 ways to concatenate Strings in Java — Best Performance

When we think about String Concatenation in Java, what comes to our mind is the + operator, one of the easiest way to join two String, or a String and a numeric in Java. Since Java doesn’t support operator overloading, it’s pretty special for String to have behavior. But in truth, it is the worst way of concatenating String in Java. When you concatenate two String using + operator e.g. «» + 101, one of the popular ways to convert int to String, compiler internally translates that to StringBuilder append call, which results in the allocation of temporary objects. You can see the real difference in performance of our example program, in which we have concatenated 100,000 String using + operator. Anyway, this article is not just about + operator but also about other ways to concatenate multiple Strings. There are four ways to do this, apart from the + operator, we can use StringBuffer, StringBuilder, and concat() method from java.lang.String class for the same purpose.

Both StringBuilder and StringBuffer classes are there for just this reason, and you can see that in our performance comparison. StringBuilder is winner and fastest ways to concatenate Strings. StringBuffer is close second, because of synchronized method and rest of them are just 1000 times slower than them. Here we will see example of all four ways of concatenating Strings in Java.

1) String Concatenation using + Operator

Easiest way of joining multiple String and numeric values in Java. Just remember that, when you have two or more primitive type values e.g. char, short or int, in the beginning of your string concatenation, you need to explicitly convert first of them to a String. For example System.out.println(200 + ‘B’ + «»); will not print 200B , instead it will print 266 , by taking ASCII value of ‘B’ and adding them to 200.

On the other hand System.out.println(«» + 200 + ‘B’) will print 200B . Unfortunately, this is the worst way to concatenate String in Java. Let’s take a look at how String concatenation operator works in Java. When we write :

it’s translated into

All + operator are translated into several StringBuilder.append() calls before final toString() call.

Since StringBuilder(String) constructor allocates a buffer with only 16 char, appending more than 16 characters will require buffer reallocation. At last, StringBuffer.toString() calls create a new String object with a copy of StringBuilder buffer.

This means, to concatenate two String, you will need to allocate, one StringBuilder , one char array[16], one String object and another char[] of appropriate size to fit your input value. Imagine if you are doing this thousands times in your application, it’s not only slow but also increase work load of Garbage Collector.

You can also see Java Performance The Definitive Guide By Scott Oaks to learn more about how to do performance testing in Java and how to tune different things in Java ecosystem to get the best performance from your Java application.

2) Using concat() method from java.lang.String

Concat(String str) method concatenates the specified String to the end of this string. I have hardly seen this used for concatenation, though. Inside, it allocates a char[] of length equal to combined length of two String, copies String data into it and creates a new String object using private String constructor, which doesn’t make a copy of input char[] , as shown below.

The performance of concat() method is similar to + operator and I don’t recommend to use it for any production purpose.

3) Using StringBuffer

This was the proper way to concatenate multiple String, integer, and others prior to Java 5 when StringBuilder was not available. It’s much faster than + operator and concert() method. The only drawback of this class is that all it’s append methods are synchronized. Since we hardly share temporary string in a concurrent environment, the price for thread-safety is not desired in many cases, that’s where StringBuilder is used. It works similar to StringBuilder synchronization. It also provides several overloaded append() method to concatenate integer, char, short etc.

4) Using StringBuilder

This is the best way to concatenate String in Java, especially when you are concatenating multiple Strings. It’s not thread-safe, but you hardly need that during String concatenation. In next section we will see performance comparison of all these 4 ways to concatenate String in Java.

Performance comparison + Operator vs Concat vs StringBuffer vs StringBuilder

here is a sample Java program to find out which method gives us best performance for String concatenation.

You can clearly see that given everything same, StringBuilder outperform all others. It’s almost 3000 times faster than + operator. concat() method is better than + operator but still very bad compared to StringBuffer and StringBuilder. StringBuffer took more time than StringBuilder because of synchronized method. I know that, you hardly join 100K Strings but even for small numbers it adds. if you run program to join just 10 Strings, you will notice significant difference in time spent Here is what I got when I ran this program for 10 iteration only :

Though using + operator along with empty String is most easiest and obvious way to concatenate multiple String and numeric in Java, you should not use that, especially inside loops. Always use StringBuilder for string concatenation, the class is there for a reason, and if you are still using StringBuffer then get rid of that, because most of the time you don’t really need thread-safety overhead of StringBuffer. Unfortunately concat() method is only good when you need to concatenate exactly 2 strings. In short, always use StringBuilder to concatenate Strings in Java.

String concat java

Строка — это упорядоченная последовательность символов. В Java строка является основным носителем текстовой информации. Для работы со строками здесь используются следующие классы: String, StringBuilder, StringBuffer. В этом уроке речь пойдет о классе String, его на первых порах будет вполне достаточно.

В данном уроке рассматривается:

В уроке 6 уже упоминалась работа со строками, а именно, как создавать строку. Также частично со строками мы встречались в предыдущих уроках. В этом и следующих двух уроках мы углубим знания о строках. В этом уроке будут рассмотрены создание строк в Java и наиболее популярные методы при работе со строками. Следующий урок будет посвящен форматированию строк. И еще один урок будет на тему работы с регулярными выражениями в Java, поскольку регулярные выражения достаточно мощный и нужный инструмент при работе со строками.

Но начнем с самого начала.

Создание строк

Строка в Java является объектом, поэтому ее можно создать, как и любой другой объект, при помощи оператора new.

Также строку можно создать при помощи литерала (фразы заключенной в кавычки) следующим образом.

Обе строки, независимо от способа создания являются объектами — экземплярами класса String.

Важный момент: создание объектов при помощи литерала возможно только в классе String. Объекты любого другого класса при помощи литерала создать нельзя.

Можно также создать массив строк. Например, так:

Подробнее о массивах и их создании написано в уроке 10 .

Конкатенация или слияние строк в Java

Для того, чтобы объединить несколько разных строк в одну, в Java можно использовать перегруженные (специально для объектов String) операторы «+» и «=+».

Еще один важный момент : операторы «+» и «=+», перегруженные для String, являются единственными перегруженными операторами в Java. Программист здесь не имеет возможности самостоятельно перегружать какие-либо операторы (как, например, в С++ и некоторых других языках).

Пример 1:

На консоль будет выведено «Мама мыла раму»

Пример 2:

Пример 3:

Наиболее употребительные методы класса String

При использовании IDE можно легко увидеть, какие методы есть у класса и получить подсказку по их использованию. На примере IDE Eclipse: для того, чтобы открыть список методов и быстро выбрать подходящий, нужно после имени переменной поставить точку и нажать комбинацию клавиш CTRL + Space (пробел). После этого появится окно, как на рисунке 14.1, где будут перечислены все доступные методы класса.

При выборе метода из этого списка, справа (или слева) появится желтое окно с подсказкой по его использованию. При помощи нажатия Enter или двойного клика мыши метод можно вставить в ваш код, не прибегая к ручному набору.
Также после имени переменной и точки можно начать набирать вручную имя метода и после введения нескольких первых букв нажать CTRL + Space (пробел). При этом, если метод, начинающийся на эти буквы один, то он автоматически подставится в код, если методов несколько, то откроется окно, как на рисунке 14.1, где будут перечислены только те методы, которые начинаются с этих введенных вами букв.
Это было лирическое отступление о том, как облегчить себе жизнь. Далее рассмотрим методы, которые чаще всего используются при работе со строками. Некоторые задачи можно решить и без применения этих методов, но их знание значительно облегчает процесс программирования. В дальнейшем описании, первое слово, которое стоит перед названием метода — тип значения, которое возникнет в результате работы метода (значение, которое метод возвращает).

Читать еще:  Javascript string to datetime

Еще раз конкатенация

String concat(String str) — производит ту же конкатенацию, что была описана выше, но использование этого метода из класса String положительно влияет на производительность и скорость программы. На небольших примерах это незаметно и не существенно, но в более серьезных приложениях стоит использовать этот метод. Результатом работы метода будет строка. Параметр, который нужно передавать в метод для конкатенации — тоже строка, о чем нам говорит значение в скобках (String str).

Перепишем пример 2, при помощи concat():

Определение количества символов в строке

Для того чтобы определить количество символов в строке, используется метод length.

int length() возвращает длину строки. Длина равна количеству символов Unicode в строке.

Пример 4:

Извлечение символов из строки

Если нам требуется узнать, какой символ находиться в строке на конкретной позиции, можем использовать метод charAt.

char charAt(int index) возвращает символ, находящийся по указанному индексу в строке. Результатом работы метода будет символ типа char. Параметр, который передается в метод — целое число. Первый символ в строке, подобно массивам, имеет индекс 0.

Пример 5: определить последний символ в строке.

Если мы хотим работать со строкой, как с массивом символов, можем конвертировать строку в массив при помощи метода toCharArray.

char[] toCharArray() — преобразует строку в новый массив символов.

Пример 6: поменять в строке символы пробела на точки при помощи преобразования в массив символов (для этой задачи есть более простое решение, нежели преобразование в массив, но об этом чуть позже).

Примечание: в данном случае мы не сможем использовать метод charAt. При помощи этого метода мы бы смогли только найти пробелы в строке, но не поменять их.

Извлечение подстроки из строки

String substring(int beginIndex, int endIndex) или substring(int beginIndex) — возвращает новую строку, которая является подстрокой используемой строки. В параметрах метода нужно указать индекс строки, с которого начинается подстрока и индекс, которым заканчивается. Также возможно указывать только начальный индекс. В этом случае будет возвращена подстрока от начального индекса и до конца строки.

Пример 7.

Разбиение строк

Для разбиения строк на части используется метод String[] split(String regex), который разбивает строку на основании заданного регулярного выражения. О регулярных выражениях поговорим в одном из следующих уроков. Здесь покажем пример простого разбиения строки заданного одним символом.

Пример 8.

Поиск в строке

boolean contains(CharSequence s) — проверяет, содержит ли строка заданную последовательность символов и возвращает true или false.

Пример 9.

boolean endsWith(String suffix) — проверяет завершается ли строка определенными символами и возвращает true или false.

Пример 10.

boolean startsWith(String prefix) или startsWith(String prefix, int toffset) — проверяет, начинается ли строка с определенных символов. Во втором случае можно указать позицию с которой необходимо начать поиск префикса.

Пример 11.

int indexOf(int ch), indexOf(int ch, int fromIndex), indexOf(String str), indexOf(String str, int fromIndex) — метод indexOf применяется для поиска первого вхождения указанного символа в строке или первого вхождения указанной подстроки. Поиск также можно произвести с указанием позиции в строке от которой нужно начинать искать. Для поиска нужно указать соответствующие параметры. Метод возвращает число соответствующее индексу первого вхождения символа или подстроки. В случае отсутствия указанного символа или подстроки в строке, будет возвращена -1.

Пример 12

int lastIndexOf(int ch), lastIndexOf(int ch, int fromIndex), lastIndexOf(String str), lastIndexOf(String str, int fromIndex) — аналогично предыдущему случаю, только ищется последнее вхождение символа или подстроки в строке.

Модификация строк

Модификация строк не является модификацией как таковой. Дело в том, что объекты класса String после создания уже нельзя изменять. Но можно создать копию строки с изменениями. Именно это и делают следующие методы.
toLowerCase() — преобразовать строку в нижний регистр;
toUpperCase() — преобразовать строку в верхний регистр;
trim() — отсечь на концах строки пустые символы;

String replace(char oldChar, char newChar), replace(CharSequence target, CharSequence replacement) — замена в строке одного символа или подстроки на другой символ или подстроку.

Вспомним пример 6, где нужно было поменять в строке символы пробела на точки и перепишем его с использованием replace:

Сравнение строк

boolean equals(Object anObject) — проверяет идентичность строк. Возвращает true только в том случае, если в строках представлена одинаковая последовательность символов одной величены.

Пример 14

int compareTo(String anotherString) — так же проверяет идентичность строк, однако, в отличии от метода equals возвращает:

  • нулевое значение, если строки равны,
  • целое отрицательное число, если первая строка предшествует второй
  • целое положительное число, если первая строка следует за второй

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

Рассмотрим пример с именами «Маша» и «Миша». При сравнении этих двух имен (пример 15), метод compareTo укажет, что имя «Маша» предшествует имени «Миша» (выдав отрицательное число) или наоборот, «Миша» следует за «Маша» (выдав положительное число). При упорядочивании имен по алфавиту мы бы упорядочили эти имена именно так. Метод в данном случае определяет, что числовое значение буквы «а» в «Маша» меньше, чем числовое значение «и» в Миша.

Пример 15

Однако, в случае, если мы напишем «маша» с маленькой буквы и попробуем сравнить с «Миша», то получим положительное число.

То есть в данном случае имя «Миша» предшествует имени «маша». Это происходит потому, что в таблице символов Юникода буквы верхнего регистра предшествуют нижнему.

Для сравнения строк без учета регистра символов используется функция int compareToIgnoreCase(String str)

Как мы видим, при сравнивании «маша» с «Миша» мы снова получаем отрицательное значение, то есть «маша» предшествует имени «Миша».

3 Examples to Concatenate String in Java

String concatenation is the process of joining two or more small String to create a big String. For example you can create full name by concatenating first and last name of a person. Java provides multiple ways to concatenate String, but the easiest of them is by using + operator. It is one of the magical operator in Java, though Java doesn’t support operator overloading, it has made an exception in case of String and + operator. Plus operator is a binary operator and primarily used to add two numbers if both operands are integer but it can also used to concatenate String if either both or first operand is String. For example «Java» + «Programming» will produce «JavaProgramming» . You can use this operator even to convert integer to String in Java by concatenating an empty String with an integer. For example «» + 123 will produce String «123» . Other two ways to concatenate String in Java is by using StringBuffer and StringBuilder. Both these classes are mutable counterpart of String class and used to modify mutable String. Since String is Immutable in Java, any operation on String, including concatenation always produce a new String object. If you use Plus operator to concatenate String in a loop, you will end up with lots of small String object which can fill up your heap and can create lot of work for your garbage collector. To avoid such issues, Java designers have provided StringBuffer and StringBuilder, both of which can be used to create mutable String which will not produce a new String object if you do concatenation. There is one more method to concatenate String in Java is by using String.concat() function. You can use this one for String concatenation.

4 Ways to concatenate String in Java

As explained in first paragraph, there are three main ways to concatenate String in Java :

  1. Concatenation operator (+)
  2. StringBuffer class
  3. StringBuilder class
  4. String.concat() function

Let’s see examples of each way to concatenate two String object in Java.

String concatenation using + Operator

This is the most simple way to do the job. For example «One» + «Two» will produce a String object «OneTwo». You can use this operator to combine more than one String e.g. two, three, four or any number of String object like «abc» + «def» + «ghi» + «jklm» will result in «abcdefghijklm» . You can also use String literal or String variable, it will work in both scenario. Most important thing to remember about doing String concatenation is that it doesn’t modify any String object and always create a new String object. If you use literal or if the object is already exists in pool, then it may return object from String pool but otherwise it will result in a new String object. Never use this method while concatenating String in loop, it will result in lots of small String garbage. Also don’t forget to store the reference of object returned by + operator. You can also use this method to convert int to String in Java, provided they are always the second operand.

Читать еще:  Java calendar set

Concatenate String using StringBuffer and StringBuilder class

This is right way to join multiple String in Java. Why? because it represent a mutable String and when you concatenate multiple small String, it won’t generate temporary intermediate String object. This result in lot of memory saving and reduce garbage collection time. By the way, you should always use StringBuilder instead of StringBuffer because it provides the same functionality but without any synchronization overhead, which means faster operation. Use of StringBuffer or StringBuilder also results in fluent and readable code as shown below :

You can see that how easy is to join multiple String using StringBuilder. By the way don’t forget to initialize StringBuilder with required capacity which is equal to number of characters in final String. This will save memory by utilizing object properly and reduce CPU time spent during re-sizing of StringBuilder.

Java Program to Concatenate String in Java

Here is our sample Java program which will show you how you can use these three ways to concatenate String in Java. In first example, we have used + operator, while in second and third example we have used StringBuilder and StringBuffer class to join Strings in Java.

Performance of String concatenation in Java

That’s all about how to concatenate String in Java. We have leaned how we can use Plus operator +, StringBuffer and StringBuilder to join multiple String literal or object to produce a new bigger String. Just remember that String concatenation using + operator is also converted to corresponding StringBuffer and StringBuilder call depending upon which version of Java you are using because StringBuilder is only available from Java 1.5. Few key things you should remember :

  • Don’t use + operator for String concatenation in loop.
  • Always use StringBuilder for concatenation of multiple String.
  • Always initialize StringBuilder with proper capacity.

Thanks a lot for reading this far, if you like this article then don’t forget to check other String related posts as well like :

  1. Why character array is better than String for storing password? (read here)
  2. Best way to check if String is empty in Java? (see here)
  3. Why String is final in Java? (read here)
  4. Difference between StringBuffer and StringBuilder in Java? (read here)
  5. Why use equals() to compare String in Java? (check here)

Собеседование по Java — работа со строками (String in Java) (вопросы и ответы)

Список вопросов и ответов для собседования по Java по теме «Работа со строками».

К списку вопросов по всем темам

Вопросы

1. Какие “строковые” классы вы знаете?
2. Какие основные свойства “строковых” классов (их особенности)?
3. Можно ли наследовать строковый тип, почему?
4. Дайте определение понятию конкатенация строк.
5. Как преобразовать строку в число?
6. Как сравнить значение двух строк?
7. Как перевернуть строку?
8. Как работает сравнение двух строк?
9. Как обрезать пробелы в конце строки?
10. Как заменить символ в строке?
11. Как получить часть строки?
12. Дайте определение понятию “пул строк”.
13. Какой метод позволяет выделить подстроку в строке?
14. Как разбить строку на подстроки по заданному разделителю?
15. Какой метод вызывается для преобразования переменной в строку?
16. Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
17. Как найти необходимый символ в строке?
18. Можно ли синхронизировать доступ к строке?
19. Что делает метод intern()?
20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
22. Почему строка неизменная и финализированная в Java?
23. Почему массив символов предпочтительнее строки для хранения пароля?
24. Почему строка является популярным ключом в HashMap в Java?
25. Напишите метод удаления данного символа из строки.

Ответы

1. Какие “строковые” классы вы знаете?

  • public final class String implements java.io.Serializable, Comparable , CharSequence
  • public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence
  • public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence

2. Какие основные свойства “строковых” классов (их особенности)?

Все строковые классы — final (следовательно от них нельзя унаследоваться).

String.
Строка — объект, что представляет последовательность символов. Для создания и манипулирования строками Java платформа предоставляет общедоступный финальный (не может иметь подклассов) класс java.lang.String. Данный класс является неизменяемым (immutable) — созданный объект класса String не может быть изменен.

StringBuffer
Строки являются неизменными, поэтому частая их модификация приводит к созданию новых объектов, что в свою очередь расходует драгоценную память. Для решения этой проблемы был создан класс java.lang.StringBuffer, который позволяет более эффективно работать над модификацией строки. Класс является mutable, то есть изменяемым — используйте его, если Вы хотите изменять содержимое строки. StringBuffer может быть использован в многопоточных средах, так как все необходимые методы являются синхронизированными.

StringBuilder
StringBuilder — класс, что представляет изменяемую последовательность символов. Класс был введен в Java 5 и имеет полностью идентичный API с StringBuffer. Единственное отличие — StringBuilder не синхронизирован. Это означает, что его использование в многопоточных средах нежелательно. Следовательно, если вы работаете с многопоточностью, Вам идеально подходитStringBuffer, иначе используйте StringBuilder, который работает намного быстрее в большинстве реализаций.

Обработка строк в Java. Часть I: String, StringBuffer, StringBuilder: http://habrahabr.ru/post/260767/

3. Можно ли наследовать строковый тип, почему?

Классы объявлены final, поэтому наследоваться не получится.

4. Дайте определение понятию конкатенация строк.

Конкатенация — операция объединения строк, что возвращает новую строку, что является результатом объединения второй строки с окончанием первой. Операции конкатенации могут быть выполнены так:

Сравнение производительности конкатенации строк:
Оператор ‘+=’ > 92.243 с;
String.concat() > 1.254 с;
StringBuffer > 1.208 с;
StringBuilder > 1.121 с.

Конкатенация и настройки JVM: http://microfork.com/string-concatenation-java/

5. Как преобразовать строку в число?

У каждой обертки для примитивов есть свой метод valueOf(String s) , который возвращает преобразованное численное значение из строки. При этом форматы строки и принимаемого типа должны совпадать. Например:

6. Как сравнить значение двух строк?

Оператор == работает с ссылками объекта String . Если две переменные String указывают на один и тот же объект в памяти, сравнение вернет результат true . В противном случае результат будет false , несмотря на то что текст может содержать в точности такие же символы. Оператор == не сравнивает сами данные типа char . Для сравнения посимвольно необходимо использовать метод equals();

7. Как перевернуть строку?

Можно и алгоритмом переставляя каждый char , но это на ваше усмотрение:).

8. Как работает сравнение двух строк?

Строка в Java — это отдельный объект, который может не совпадать с другим объектом, хотя на экране результат выводимой строки может выглядеть одинаково. Просто Java в случае с логическим оператором == (а также != ) сравнивает ссылки на объекты.

Метод equals сравнивает посимвольно на эквивалентность.

9. Как обрезать пробелы в конце строки?

10. Как заменить символ в строке?

Можно использовать метод replace(CharSequence target, CharSequence replacement) , который меняет символы в строке. Можно преобразовать в массив символов и заменить символ там. Можно использовать StringBuilder и метод setCharAt(int index, char ch)

11. Как получить часть строки?

Метод substring(int beginIndex, int lastIndex) — возвращает часть строки по указанным индексам.

12. Дайте определение понятию “пул строк”.

Пул строк – это набор строк, который хранится в памяти Java heap. Мы знаем, что String это специальный класс в Java, и мы можем создавать объекты этого класса, используя оператор new точно так же, как и создавать объекты, предоставляя значение строки в двойных кавычках.
Диаграмма ниже объясняет, как пул строк размещается в памяти Java heap и что происходит, когда мы используем различные способы создания строк.

Пул строк возможен исключительно благодаря неизменяемости строк в Java и реализации идеи интернирования строк. Пул строк также является примером паттерна Приспособленец (Flyweight).
Пул строк помогает экономить большой объем памяти, но с другой стороны создание строки занимает больше времени.
Когда мы используем двойные кавычки для создания строки, сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка.
Тем не менее, когда мы используем оператор new, мы принуждаем класс String создать новый объект строки, а затем мы можем использовать метод intern() для того, чтобы поместить строку в пул, или получить из пула ссылку на другой объект String с таким же значением.

Читать еще:  Java lang charsequence

Ниже приведен пример, показывающий работу пула строк.

13. Какой метод позволяет выделить подстроку в строке?

В дополнении к «как получить часть строки» можно использовать метод string.indexOf(char c) , который вернет индекс первого вхождения символа. Таким образом потом можно использовать этот номер для выделения подстроки с помощью substring();

14. Как разбить строку на подстроки по заданному разделителю?

Мы можем использовать метод split(String regex) для разделения строки на массив символов, используя в качестве разделителя регулярное выражение. Метод split(String regex, int numOfStrings) является перегруженным методом для разделения строки на заданное количество строк. Мы можем использовать обратную черту для использования специальных символов регулярных выражений в качестве обычных символов.

15. Какой метод вызывается для преобразования переменной в строку?

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

str.charAt(int i) вернет символ в по индексу.

17. Как найти необходимый символ в строке?

str.indexOf(char ch) или lastIndexOf(char c) — вернет индекс первого и последнего вхождения символа.

18. Можно ли синхронизировать доступ к строке?

String сам по себе потокобезопасный класс. Если мы работаем с изменяемыми строками, то нужно использовать StringBuffer .

19. Что делает метод intern()?

Когда метод intern() вызван, если пул строк уже содержит строку, эквивалентную к нашему объекту, что подтверждается методом equals(Object) , тогда возвращается ссылка на строку из пула. В противном случае объект строки добавляется в пул и ссылка на этот объект возвращается.
Этот метод всегда возвращает строку, которая имеет то же значение, что и текущая строка, но гарантирует что это будет строка из пула уникальных строк.
Ниже приведен пример работы метода intern()

20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?

В дополнение к ответу вначале приведу сравнение производительности классов.

Сравнение производительности. Linux

Сравнение производительности. Windows XP:

21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?

Привести их к одному типу и сравнить.

22. Почему строка неизменная и финализированная в Java?

Есть несколько преимуществ в неизменности строк:

  1. Строковый пул возможен только потому, что строка неизменна в Java, таким образом виртуальная машина сохраняет много места в памяти(heap space), поскольку разные строковые переменные указывают на одну переменную в пуле. Если бы строка не была неизмененяемой, тогда бы интернирование строк не было бы возможным, потому что если какая-либо переменная изменит значение, это отразится также и на остальных переменных, ссылающихся на эту строку.
  2. Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае любой хакер может изменить значение ссылки и вызвать проблемы в безопасности приложения.
  3. Так как строка неизменная, она безопасна для многопоточности и один экземпляр строки может быть совместно использован различными нитями. Это позволяет избежать синхронизации для потокобезопасности, строки полностью потокобезопасны.
  4. Строки используются в Java classloader и неизменность обеспечивает правильность загрузки класса при помощи Classloader. К примеру, задумайтесь об экземпляре класса, когда вы пытаетесь загрузить java.sql.Connection класс, но значение ссылки изменено на myhacked.Connection класс, который может осуществить нежелательные вещи с вашей базой данных.
  5. Поскольку строка неизменная, её hashcode кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в Map и его обработка будет быстрее, чем других ключей HashMap. Это причина, почему строка наиболее часто используемый объект в качестве ключа HashMap.

23. Почему массив символов предпочтительнее строки для хранения пароля?

Строка неизменяемая в Java и хранится в пуле строк. С тех пор, как она была создана, она остается в пуле, пока не будет удалена сборщиком мусора, поэтому, когда мы думаем, что закончили работу с паролем, он остается доступным в памяти некоторое время, и нет способа избежать этого. Это риск безопасности, поскольку кто-либо, имеющий доступ к дампу памяти сможет найти пароль в виде чистого текста.
Если мы используем массив символов для хранения пароля, мы можем очистить его после того, как закончим с ним работать. Таким образом, мы можем контролировать, как долго он находится в памяти, что позволяет избежать риска безопасности, свойственного строке.

24. Почему строка является популярным ключом в HashMap в Java?

Поскольку строки неизменны, их хэшкод кэшируется в момент создания, и не требует повторного пересчета. Это делает строки отличным кандидатом для ключа в Map и они обрабатываются быстрее, чем другие объекты-ключи HashMap. Вот почему строки преимущественно используются в качестве ключей HashMap.

25. Напишите метод удаления данного символа из строки.

Мы можем использовать метод replaceAll для замены всех вхождений в строку другой строкой. Обратите внимание на то, что метод получает в качестве аргумента строку, поэтому мы используем класс Character для создания строки из символа, и используем её для замены всех символов на пустую строку.

concat « string « Java Data Type Q&A

1. Is there a difference between String concat and the + operator in Java? stackoverflow.com

Duplicate

2. Java — is there an Inbuilt function for concatenating the Strings in a String[]? stackoverflow.com

Or a better way than this? No worries if .

3. Concat over ‘+’ operator for string concatenation stackoverflow.com

Output obtained : Why «ING» is not concatenated?

5. Java; is += more efficient that .concat? stackoverflow.com

I’ve been reading code produced by other developers on my team, they seem to favour using += for String concatenation, whereas I prefer using .concat() as it feels easier to read. I’m .

6. Difference between string.concat() and + operator stackoverflow.com

Possible Duplicate:
Is there a difference between String concat and the + operator in Java? Is there any difference between: and

7. String class: + vs concat coderanch.com

The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny — it is the light that guides your way. — .

8. String Concat coderanch.com

Originally posted by jignesh soni: So how do you know when next GC is and my other part is unanswered yet. I am not clear wheen we concat two strings, third string will be created and which one of these three strings will not have reference, probably newly created concatted string right ? if you write the code as in your .

9. Difference between ‘+’ and concat() method in String coderanch.com

Not quite. + does use a StringBuffer or StringBuilder, but concat() creates a new char[] with the contents of the current String and the String to append, and returns a new String based on that array: public String concat(String str) < int otherLen = str.length(); if (otherLen == 0) < return this; >char buf[] = new char[count + otherLen]; getChars(0, .

10. String concat coderanch.com

11. Difference between ‘+’ and concat in string coderanch.com

12. concat method creates an extra String Object coderanch.com

13. String Concat coderanch.com

Hi, I would like to concat few strings into one. Below shows the code (as suggested yesterday in the previous post) of extracting certain values from string a. for (int r = 1;r «+newStr3); > .

14. adding string methods? not concat forums.oracle.com

How can I add together strings such as «1» + «2» = «3» not «1» + «2» = «12» if there is no way to do this, how can I convert a string value such as «1» to 1, so I can then add these integers together? Any help is appreciated. thanks, Patrick.

15. Method w/ String’s concat not working forums.oracle.com

16. String Manipulation.concat forums.oracle.com

17. Using String.concat() inside a function forums.oracle.com

rocketGhost wrote: Hello everyone, Hopefully this will be easy to figure out — I am primarily a C++ programmer, learning Java. Thus far I have been under the impression that when I pass any Object to a function, it’s always like passing a pointer in C++ (unless I use ‘final’); It’s just like passing a pointer in C (which is always .

18. String concat Problem forums.oracle.com

19. String.concat() vs + operator in strings concatenations forums.oracle.com

20. Concat to a single string forums.oracle.com

Hi I need help to concat string from a file. I want to concat just the 2’s into a single string but i want to keep the order and use only one vector as the result. Below is the sample data 1|000000000010000000|CLUTCH,OILWELL E-2000,NEUTRAL BRAKE|KBSB|19971008|20040322||VIT|01AAAA|0111010023|PCE||||||| 0.0||05| 2|000000000010000000|CLUTCH,OILWELL E-2000,NEUTRAL BRAKE. 2|000000000010000000|PARTS FOR DRAWWORKS AND HOISTS. 2|000000000010000000|RATING : 2,000 HP. 2|000000000010000000|DRILLING DEPTH : 20,000 .

Ссылка на основную публикацию
Adblock
detector