JavaRush /Java блог /Архив info.javarush /Уровень 22. Ответы на вопросы к собеседованию по теме уро...
zor07
31 уровень
Санкт-Петербург

Уровень 22. Ответы на вопросы к собеседованию по теме уровня

Статья из группы Архив info.javarush
Уровень 22. Ответы на вопросы к собеседованию по теме уровня - 1
  1. Как правильно сравнить две строки в Java?

    Метод equals проверяет – совпадают ли строки.

    
    boolean equals (Object o)
    String s = "cat";
    boolean test1 = s.equals("cat");//true
    boolean test2 = s.equals("Cat");//false
    boolean test3 = s.equals("c"+"a"+"t");//true
    
  2. Как правильно сравнить две строки в Java игнорируя регистр букв?

    Метод equalsIgnoreCase – совпадают ли строки, игнорируя регистр букв.

    
    boolean equalsIgnoreCase (String str)
    String s = "cat";
    boolean test1 = s.equalsIgnoreCase("cat");//true
    boolean test2 = s.equalsIgnoreCase("Cat");//true
    boolean test3 = s.equalsIgnoreCase("cAT");//true
    
  3. Как отсортировать список строк в алфавитном порядке?

    Используя метод Collections.sort().

    
    ArrayList list = new ArrayList<>();
    list.add("zas");
    list.add("fas");
    list.add("sd");
    list.add("asdg");
    Collections.sort(list);
    
  4. В какой кодировке хранятся строки в Java?

    Строки в java хранятся в Unicode.

  5. Как преобразовать строку в кодировку Windows-1251?

    
    String utf8 = "text";
    byte[] bytes1251 = utf8.getBytes("windows-1251");
    String win1251 = new String(bytes1251,"windows-1251");
    
  6. Как разбить строку на отдельные слова?

    • String[] split(String regex)
    • StringTokenizer:

      
      String s = "Good news everyone!";
      
      StringTokenizer tokenizer = 
         new StringTokenizer(s,"ne");
      while (tokenizer.hasMoreTokens())
      {
       String token = tokenizer.nextToken();
       System.out.println(token);
      }
      
  7. Как развернуть строку задом наперед?

    
    String s = "Bender";
    StringBuilder s2 = new StringBuilder(s);
    s2.reverse(); //будет "redneB";
    
  8. Что происходит, когда мы пишем "A"+"b"+"C"?

    Примерно следующее:

    
    new StringBuilder().append("A").append("b").append("C").toString();
    
  9. Что такое mutable и immutable типы?

    Объекты, которые после их создания изменить нельзя, называются неизменяемыми или immutable.

    Объекты, которые после создания можно изменить, называются изменяемыми или mutable.

  10. Что дает типу String то, что его сделали immutable?

    • Безопасность.

      String широко используется, как параметр для многих классов Java, в частности для открытия сетевых соединений, подключений к БД, открытию файлов и пр. И если бы строка изменялась, то мы могли получить доступ к объекту (файлу например), на который мы имеем право, затем изменить строку с именем (случайно или намеренно) и получить доступ уже к другому файлу.

      Так же String используется в механизме загрузки файлов, и это – фундаментальный аспект. И если бы строка изменялась, то запрос на загрузку "java.io.Writer" мог бы быть изменён на "DiskErasingWriter".

    • Hashcode

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

    • Многопоточность

      immutable делает экземпляры строк потокобезопасными.

Комментарии (15)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
25 мая 2022
10. Стоит также добавить: d.Производительность. Неизменяемость позволяет строкам использовать все преимущества пула строк и сохранять при этом много памяти.
Anatoly Уровень 35
30 марта 2022
А точно есть уверенность, что в 8 вопросе java конкатенацию именно так обрабатывает через StringBuilder, а не на каждое сложение создает новую строку?
Евгений Уровень 28
17 февраля 2022
If String compaction is disabled, the bytes in {@code value} are always encoded in UTF16. String.java
Vitaly Khan Уровень 40 Master
1 марта 2019
на 4-й вопрос правильный ответ: UTF-16 (JavaDocs: A String represents a string in the UTF-16 format) Unicode - это не кодировка, это стандарт, представляющий набор кодировок для единой таблицы соответствия (символа числу)
Игорь Уровень 41
3 февраля 2019
Хотел спросить, почему одна строка в формате UTF-8 другая в Windows-1251 а при вызове метода getBytes() выдает одни и те же байты? Я думал что все эти Charset просто байты за разные символы воспринимает нет?
Артём Кашкин Уровень 41
28 октября 2018
Спасибо за ответы !!!
Rihard1985 Уровень 33 Master
29 июля 2018
Самая полезная лекция
lichMax Уровень 40
16 апреля 2017
Касательно 6-го вопроса. В документации Оракла к Джаве написано, что StringTokenizer существует в языке только для совместимости, и рекумендуется вместо этого класса использовать метод split у String (первый вариант).
MaineCoon Уровень 39
26 января 2017
1. Как правильно сравнить две строки в Java?
еще вариант:
<code>String s1 = "cat";
String s2 = "cat";
s1.intern() == s2.intern() //вернет true </code>
docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()
8. Что происходит, когда мы пишем «A»+«b»+«C»?
Это разве не про конкатенацию вопрос?
Fatal Уровень 14
12 июля 2016
Я хотел бы уточнить.

1. Как правильно сравнить две строки в Java?
String s = "cat";


Где «cat» это строковый литерал, который помещается сразу в пул. Если мы сравниваем строковый литерал с строковым литералом, это можно делать так ==, что гораздо быстрее. Если же мы сравниваем не с строковым литералом, а, допустим, с результатом ввода, то сравнивать нужно так:

"cat".equals(s)


Дабы избежать NPE