JavaRush/Java блог/Архив info.javarush/Небольшой тест по String
RabenokDmitry
21 уровень

Небольшой тест по String

Статья из группы Архив info.javarush
участников
Представляю вашему вниманию один небольшой вопрос, который нам задали на, так называемой, "летучке" на обучении. Есть в нем вещи тривиальные, а есть и не очень, на которых я и попался. Итак, дан код, нужно написать, что выведет в консоль и объяснить почему. public static void main(String[] args) { String s1 = "AB"; String s2 = "A" + "B"; String s3 = new String("AB"); System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.toString() == s2); System.out.println(s1.equals(" AB".trim())); System.out.println("AB".equals("ab")); } Первому кто напишет все ответы правильно (чего я не смог) тому печенька и плюс к карме:)
Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
sem_top7
Уровень 32
24 марта 2015, 14:52
Кому интересно, есть на андроиде одна среда разработки — называется AIDE ссылка. Установите себе на телефон или планшет, и запустите данный в топике код.
IgorBrest
Уровень 33
23 марта 2015, 20:57
1. тут самое интересное)). с одной стороны — созданы объект s1 и объект s2. так как это два разных объекта, то ссылки они должны иметь разные. в таком случае FALSE. Но нюанс в том, что при создании объектов String с помощью литерала, используется хитрый механизм, который, прежде чем выделять новый участок памяти в куче, проверяет, нет ли уже таких строк, и если точно такая строка уже создана, то просто возвращает ссылку на существующую строку. По этому принципу объекты s1 и s2 могут получить одинаковые ссылки и при сравнении s1==s2 будет TRUE.
2. FALSE. ну тут понятно. при использовании new гарантированно выделяется новый участок памяти и тогда ссылки гарантированно разные.
3., 4. TRUE. тут никто, наверно, не ошибется
5. принцип как и в первом пункте
6 TRUE и тут
7 FALSE и тут ничего интересного.

p.s. объяснения sem_top7 комментировать не буду… хотя очень хотелось…
sem_top7
Уровень 32
22 марта 2015, 23:15
1. Объект сравнивается сам с собой — true
2. Объект сравнивается с ссылкой — false
3. Сравниваются два одинаковых объекта — true
4. Метод equals сравнивает содержимое ссылок(то есть объекты) — true
5. toString переводит значение в строку — так как объекты равны — true (а если System.out.println(s3.toString() == s2); — тогда false, так как ссылка врятли будет иметь вид как строка АВ)
6. trim удаляет все пробелы справа и слева — так как объекты равны — true
7. Объекты различны — false
RabenokDmitry
Уровень 21
22 марта 2015, 23:24
Я прошу прощения, в первой строке s1 == s2. Это моя опечатка. Правильные ответы я напишу отдельным постом через несколько дней, чтобы всем остальным свои результаты можно было обдумать и опубликовать:)
sem_top7
Уровень 32
23 марта 2015, 12:08
Все выше мной перечисленное справедливо для jdk1.8.0_31. А на других версия результат может отличаться :) А вот почему, нам расскажет потом автор поста, наверное :)
hundr3th
Уровень 33
22 марта 2015, 22:29
Первое тру, второе фолс, не знаю почему только, может потому что создается именно объект, и получается что сравнивается ссылка? потом все тру, а что такое трим я не знаю, поэтому хз С: