Представляю вашему вниманию один небольшой вопрос, который нам задали на, так называемой, "летучке" на обучении.
Есть в нем вещи тривиальные, а есть и не очень, на которых я и попался. Итак, дан код, нужно написать, что выведет в консоль и объяснить почему.
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"));
}
Первому кто напишет все ответы правильно (чего я не смог) тому печенька и плюс к карме:)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
2. FALSE. ну тут понятно. при использовании new гарантированно выделяется новый участок памяти и тогда ссылки гарантированно разные.
3., 4. TRUE. тут никто, наверно, не ошибется
5. принцип как и в первом пункте
6 TRUE и тут
7 FALSE и тут ничего интересного.
p.s. объяснения sem_top7 комментировать не буду… хотя очень хотелось…
2. Объект сравнивается с ссылкой — false
3. Сравниваются два одинаковых объекта — true
4. Метод equals сравнивает содержимое ссылок(то есть объекты) — true
5. toString переводит значение в строку — так как объекты равны — true (а если System.out.println(s3.toString() == s2); — тогда false, так как ссылка врятли будет иметь вид как строка АВ)
6. trim удаляет все пробелы справа и слева — так как объекты равны — true
7. Объекты различны — false