为什么第二个输出false呢?

public class Main {
public static void main(String[] args) {
String s1, s2;
s1 = new String("Good holiday.");
s2 = new String("Good holiday.");
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);
}
}

每次new 操作时都会分配不同的内存地址,==比较对象的是否相等,引用类型对象的就是对象的内存地址,基本类型对象就是值就是字面量;Object中equals默认就是==操作,但是String中对于equals方法进行了重写,它比较的是字符串值是否相同;
显而易见都是"Good holiday."所以相等,

每new一次就分配不同的内存,equals比对的是值,==比对值还比对地址,故后面的为false

每次new String 是新创建字符串对象,同时引用指向不同;
== 是比较的两个对象,那么比较的是两个对象的引用,也就是两个对象是否为同一个对象,并不是比较的对象的内容

==是对基本类型是值比较对引用类型是地址比较
equals只有引用类型才有来自于object类默认是==

每次new String 是新创建字符串对象,同时引用指向不同;