I have this code which I cannot understand. In the beginning you can see two identical Strings, and when I compare them with use of operator == it says it is true, same as equals() method, but when I create two identical strings during runtime operator == says false. Why is this happening ?
Does it mean that when I hardcode identical strings they are placed in the same position in the memory and both references point to it? I found similar question, but there were no explicit answer.
public class StringTesting {
    public static void main(String[] args){
        String string1 = "hello";                   //\
                                                    // } same place in the memory ?
        String string2 = "hello";                   ///
        System.out.println(string1 == string2);     //true
        System.out.println(string1.equals(string2));      //true
        String string3 = "hey";
        String string4 = "he";
        System.out.println(string3 == string4);          //false
        System.out.println(string3.equals(string4));     //false
        string4 += "y";
        System.out.println(string3 == string4);          //false ????
        System.out.println(string3.equals(string4));     //true
        System.out.println(string3 + " " + string4);      //hey hey
    }
}
 
     
     
     
    