(1)比较基本数据类型时
只能采用"==",比较的是数值;
(2)当比较引用数据类型时
"==" 比较的是引用对象的内存地址;
而equals分两种情况,如果类没有重写 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象的内存地址;
如果类重写了 equals() 方法。那么比较的是两个对象的内容是否相等(一般都重写);若它们的内容相等,则返回 true (即,认为这两个对象相等)。
(1)String 中的 equals 方法是被重写过的,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的内容。
(2)当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
https://blog.csdn.net/weixin_44382383/article/details/89854776
菜鸟教程: -- https://www.runoob.com/java/java-string.html
注:面试题二中
* System.out.println(s1 == s2); //true 地址值相同,都是常量,在常量池里面查找
* System.out.println(s1.equals(s2)); //true 地址值相同,默认同一个对象,值当然也是相等的。
原文:https://www.cnblogs.com/liaowenhui/p/12269475.html