import java.io.File;
import java.util.Date;

public class ReferenceDemo {
    public static void main(String [] args) {
        File f1 = new File("mydata.txt");
        File f2 = new File("mydata.txt");

        if (f1 != f2) 
            System.out.println("f1 != f2");

        Date today = new Date();
        Date now = today;

        if (today == now)
            System.out.println("today == now");

        String s1 = "Hello";
        String s2 = "Hello";

        if (s1 == s2)
            System.out.println("s1 == s2");

        String x1 = new String("Goodbye");
        String x2 = new String("Goodbye");

        if (x1 == x2)
            System.out.println("x1 == x2");
    }
}
Что будет выведено?
Explanation
По поводу сравнения s1 == s2.
В Java есть такое понятие как интернирование строк. При использовании строкового литерала он кешируется в классе String.
В следующий раз при использовании того же литерала будет использован его экземпляр из кеша. Но в случае создания строки с помощью new будет создан новый объект.
Данное поведение описано спецификацией (секция 3.10.5).

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты