System.out.println("s1和s3内存地址相同吗?"+s1==s3);
这个应该是运算符优先级的问题,
"s1和s3内存地址相同吗?"+s1==s3
正确的操作是System.out.println("s1和s3内存地址相同吗?"+(s1==s3));先判断s1==s3是真假,然后与前面的字符串拼接;
如果后面的等式判断不加括号的话,会形成("s1和s3内存地址相同吗?"+s1)==(s3)的判断;前面的字符串与s1的拼接与后面的字符串s3肯定不是相同的,所以等式判断返回false-----