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, 16:14
10. Стоит также добавить: d.Производительность. Неизменяемость позволяет строкам использовать все преимущества пула строк и сохранять при этом много памяти.
Anatoly
Уровень 35
30 марта 2022, 05:18
А точно есть уверенность, что в 8 вопросе java конкатенацию именно так обрабатывает через StringBuilder, а не на каждое сложение создает новую строку?
Батислав Баткин душа в колесе сансары
20 апреля 2022, 17:13
Предполагаю, что это ело бы слишком много памяти, нецелесообразно, ведь создание обьекта эта ресурсо-затратный процесс.
Евгений
Уровень 28
17 февраля 2022, 15:15
If String compaction is disabled, the bytes in {@code value} are always encoded in UTF16. String.java
Vitaly Khan Java Developer в Onollo Master
1 марта 2019, 03:30
на 4-й вопрос правильный ответ: UTF-16 (JavaDocs: A String represents a string in the UTF-16 format) Unicode - это не кодировка, это стандарт, представляющий набор кодировок для единой таблицы соответствия (символа числу)
Nordis
Уровень 28
Expert
14 августа 2019, 07:01
Вот , я тоже смотрю и думаю. Ведь в idea устанавливается кодировка для проекта. И там у меня utf 8 , помоему.
Игорь Enterprise Java Developer
3 февраля 2019, 07:39
Хотел спросить, почему одна строка в формате UTF-8 другая в Windows-1251 а при вызове метода getBytes() выдает одни и те же байты? Я думал что все эти Charset просто байты за разные символы воспринимает нет?
Vitaly Khan Java Developer в Onollo Master
1 марта 2019, 03:32
возможно в вашем случае использовались символы, которые одинаково кодировались обеими кодировками. вообще, не видя кода, трудно однозначно ответить.
Денис Давыдов
Уровень 38
10 июня 2020, 18:21
Возможно, вы использовали только символы ASCII (цифры, некоторые символы, английский алфавит). Для них, по-моему, код одинаков в обеих кодировках. Попробуйте русский алфавит.
Артём Кашкин
Уровень 41
28 октября 2018, 21:52
Спасибо за ответы !!!
Rihard1985
Уровень 33
Master
29 июля 2018, 15:56
Самая полезная лекция
lichMax
Уровень 40
16 апреля 2017, 13:13
Касательно 6-го вопроса. В документации Оракла к Джаве написано, что StringTokenizer существует в языке только для совместимости, и рекумендуется вместо этого класса использовать метод split у String (первый вариант).
MaineCoon
Уровень 39
26 января 2017, 13:47
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»?
Это разве не про конкатенацию вопрос?
lichMax
Уровень 40
16 апреля 2017, 13:07
Вообще-то как раз и имелось в виду под словом «правильно», что нужно использовать метод equals. Кстати, по идеи тут больше подходит метод compareTo(), так как он именно сравнивает строки, а не проверяет, эквивалентны они или нет.
Fatal
Уровень 14
12 июля 2016, 23:07
Я хотел бы уточнить.

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


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

"cat".equals(s)


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