小言_互联网的博客

偷偷理解Java和Scala中==和equals()的区别

220人阅读  评论(0)

君霸王,社稷定,君不霸王,社稷不定🥽

目录

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就行了。

总结:


转载:https://blog.csdn.net/qq_45796486/article/details/128752185
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场