public class ExampleString {
    public static void main(String[] args) {
        String s1="u cannot change me!";
        String s2="u cannot change me!";
        String s3="u cannot"+" change me!";
        String s4="u cannot";
        String s5=s4+" change me!";
        final String s6="u cannot";
        String s7=s6+" change me!";
        System.out.println("s1==s2 "+(s1==s2));//true
        System.out.println("s1==s3 "+(s1==s3));//true
        System.out.println("s1==s5 "+(s1==s5));//false  why  it is false
        System.out.println("s1==s7 "+(s1==s7));//true   why  it is true
        System.out.println("s4==s6 "+(s4==s6));//true 
      //  System.out.println("s5 "+s5);
       // System.out.println("s7 "+s7);
        System.out.println("s5==s7 "+(s5==s7));//false  why                     
    }
}
in case of s5 am doing concatenation but it will give ouput false in case of s7 also am doing concatenation it will give true. am declaring s6 am declaring string as final string am getting true my question is why it is giving like that or what is the difference between them
