君霸王,社稷定,君不霸王,社稷不定🥽
目录
Java总结
Scala总结
Java中==
和equals()
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class Test {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
}
}
总结:
==
比较的是对象的内存地址
equals()
默认和==
一样,也比较的是对象的内存地址,只不过是String对equals()
方法进行了重写,字符串的equals()方法比较的是内容。
Scala中==
、equals()
、eq()
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
object Test {
def main(args:Array[String]): Unit={
var s1:String = new String("abc")
var s2:String = "abc"
println(s1 == s2) //true
println(s1.equals(s2)) //true
println(s1.eq(s2)) //false
}
}
scala中,==和equals()功能相同,都比较的是内容是否相同
object Test {
def main(args:Array[String]): Unit={
var s1:String = new String("abc")
var s2:String = "abc"
println(s1 == s2) //true
//println(s1.equals(s2)) //true
//println(s1.eq(s2)) //false
}
}
我们单独编译这一条,然后用反编译工具查看字节码文件。
1.从伴生类作为入口开始执行,然后调用伴生对象所属类中的main方法
2.查看伴生对象所属类中的main方法发现它底层调用的是equals()方法,因此在Scala中,==和equals()功能相同,都比较的是内容是否相同
3.在Scala 中要想比较地址是否相同
,就用第三种方法,eq()
方法
eq()编译查看字节码文件
对于==和equals()是否多余?
各有各的应用场景。
对于引用类型:
1. eq()比较地址是否相同
2. equals()比较内容是否相同 ---> 前提是要重写equals()方法
对于值类型:
==比较是否相等 ---> a == 100
例如想要判断a是否等于100 这个时候用equals()就不太合适了,直接用a == 100就行了。