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
Зареєструйся Зараз
або Підпишись на майбутні тести