Вариант первый:
package com.javarush.task.task04.task0421;

/*
Настя или Настя?
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String name1 = bufferedReader.readLine();
        String name2 = bufferedReader.readLine();

        if (name1 == name2)
            System.out.println("Имена идентичны");
    }
}
Вариант второй:
package com.javarush.task.task04.task0421;

/*
Настя или Настя?
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String name1 = "test";//bufferedReader.readLine();
        String name2 = "test";//bufferedReader.readLine();

        if (name1 == name2)
            System.out.println("Имена идентичны");
    }
}
Прошу объяснить, что я делаю не так или чего не знаю. По какой причине в первом случае условие не выполняется при вводе двух строк test и программа возвращает exit code 0, а во втором случае условие выполняется и на экран выводится "Имена идентичны"?