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
Кому интересно, есть на андроиде одна среда разработки — называется AIDE ссылка. Установите себе на телефон или планшет, и запустите данный в топике код.
IgorBrest Уровень 33
23 марта 2015
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
1. Объект сравнивается сам с собой — true
2. Объект сравнивается с ссылкой — false
3. Сравниваются два одинаковых объекта — true
4. Метод equals сравнивает содержимое ссылок(то есть объекты) — true
5. toString переводит значение в строку — так как объекты равны — true (а если System.out.println(s3.toString() == s2); — тогда false, так как ссылка врятли будет иметь вид как строка АВ)
6. trim удаляет все пробелы справа и слева — так как объекты равны — true
7. Объекты различны — false
hundr3th Уровень 33
22 марта 2015
Первое тру, второе фолс, не знаю почему только, может потому что создается именно объект, и получается что сравнивается ссылка? потом все тру, а что такое трим я не знаю, поэтому хз С: