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).

Follow CodeGalaxy

Mobile Beta

Get it on Google Play
Send Feedback
Keep exploring
Java quizzes
Cosmo
Sign Up Now
or Subscribe for future quizzes