Java中==和 .equals()方法的区别

equals()方法和 == 运算符都用于比较 Java 中的两个对象。 == 是运算符,equals()是方法。 但是 == 运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。
每当使用操作符 new 创建一个对象时,它都会为该对象创建一个新的内存位置。 所以使用 == 运算符来检查两个对象的内存位置或地址是否相同。

通常,Java 中的 equals()== 运算符都用于比较对象以检查相等性,但以下是两者之间的一些区别:

  • .equals() 方法和 == 运算符的主要区别在于,一个是方法,另一个是运算符。
  • 可以使用 == 操作符进行引用比较(地址比较)和 .equals() 方法进行内容比较。 简单来说, == 检查两个对象是否指向相同的内存位置,而 .equals() 评估对象中值的比较。
  • 如果一个类没有覆盖 equals 方法,那么默认情况下,它会使用覆盖该方法的最近父类的 equals(Object o) 方法。
// Java program to understand // the concept of == operator public class Test {     public static void main(String[] args)     {         String s1 = "HELLO";         String s2 = "HELLO";         String s3 = new String("HELLO");          System.out.println(s1 == s2); // true         System.out.println(s1 == s3); // false         System.out.println(s1.equals(s2)); // true         System.out.println(s1.equals(s3)); // true     } } 

运行结果:

true false true true 

说明:在这里,创建了两个对象,即 s1s2

  • s1s2 都引用相同的对象。
  • 当使用 == 运算符进行 s1s2 比较时,结果为true,因为两者在字符串常量池中具有相同的地址。
  • 使用 equals,结果为true,因为它只比较 s1s2 中给出的值。

等式运算符(==)
可以对每个原始类型应用相等运算符,包括布尔类型。还可以对对象类型应用相等运算符。

// Java program to illustrate // == operator for compatible data // types  class Test {     public static void main(String[] args)     {         // integer-type         System.out.println(10 == 20);          // char-type         System.out.println('a' == 'b');          // char and double type         System.out.println('a' == 97.0);          // boolean type         System.out.println(true == true);     } } 

运行结果:

false false true true 

如果将 == 应用于对象类型,那么参数类型之间应该存在兼容性(子到父或父到子或相同类型)。 否则,会得到一个编译时错误。

示例代码:

// Java program to illustrate // == operator for incompatible data types  class Test {     public static void main(String[] args)     {         Thread t = new Thread();         Object o = new Object();         String s = new String("Yiibai");          System.out.println(t == o);         System.out.println(o == s);      // Uncomment to see error     System.out.println(t==s);     } } 

运行结果:

false false // error: incomparable types: Thread and String 

.equals() 方法

在 Java 中,String equals() 方法根据字符串的数据/内容比较两个给定的字符串。 如果两个字符串的所有内容都相同,则返回 true。 如果所有字符都不匹配,则返回 false

示例代码:

public class Test {     public static void main(String[] args)     {         Thread t1 = new Thread();         Thread t2 = new Thread();         Thread t3 = t1;          String s1 = new String("Yiibai");         String s2 = new String("Yiibai");          System.out.println(t1 == t3);         System.out.println(t1 == t2);         System.out.println(s1 == s2);          System.out.println(t1.equals(t2));         System.out.println(s1.equals(s2));     } } 

运行结果:

true false false false true 

说明:在这里,使用 .equals 方法来检查两个对象是否包含相同的数据。

  • 在上面的例子中,创建了 3 个 Thread 对象和 2 个 String 对象。
  • 在第一个比较中, 使用 t1 == t3 检查是否 t1 和 t3 都指向同一个对象,它返回 true
  • 在第二个比较中,使用运算符==来比较字符串对象而不是对象的内容。 在这里,两个对象都是不同的,因此这个比较的结果是false
  • 当通过 .equals() 运算符比较 2 个 String 对象时,正在检查两个对象是否包含相同的数据。
  • 两个对象都包含相同的字符串,即 Yiibai,它返回 true

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264173.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论