String类的equals方法是比较两个字符串的内容是否相同;而==是判断两个字符串变量是否具有相同的对象引用,即是否指向同一个内存对象所以,第一个输出是false,第二个是ture。最后一个是true是因为s3和s4是通过字符串常量的方式来赋值的(不同于new的方式),因为常量是不变的,所以重用一个内存对象,这其实是java的优化机制。