ITPub博客

首页 > 应用开发 > Java > 在 Java 中,== 和 .equals() 有何不同?

在 Java 中,== 和 .equals() 有何不同?

原创 Java 作者:mingtian66 时间:2024-10-29 13:21:42 0 删除 编辑

在 Java 中,== 和 .equals() 都用于比较,但它们的作用和使用场景不同:
1. == 操作符

    == 是一个比较 引用地址(内存地址)的操作符。
    在 基本数据类型(如 int, float, char 等)的比较中,== 比较的是值是否相等。
    在 引用数据类型(如 String, Object, 自定义类等)的比较中,== 比较的是两个对象在内存中的地址是否相同,也就是它们是否引用了同一个对象。

示例:

java

int a = 5;
int b = 5;
System.out.println(a == b);  // 输出 true,因为基本类型按值比较

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);  // 输出 false,因为 s1 和 s2 是不同的对象

在上面的代码中,尽管 s1 和 s2 的内容相同,但它们是不同的对象,因此 s1 == s2 为 false。
2. .equals() 方法

    .equals() 是一个 对象方法,默认在 Object 类中定义,可以被 Java 的类(如 String)重写。
    默认的 .equals() 方法(即在未被重写的情况下)也是比较引用地址。
    许多 Java 类(如 String、Integer、Date 等)都重写了 .equals() 方法,使它们可以基于内容比较对象的“相等性”。
    使用 .equals() 时,一般是比较对象的内容是否相同,而非地址。

示例:

java

String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1.equals(s2));  // 输出 true,因为 String 重写了 equals(),按内容比较

在上面的代码中,String 类重写了 equals() 方法,使得 s1.equals(s2) 返回 true,因为它比较的是内容,而不是地址。
小结
比较方式    使用场景    比较内容    示例
==    基本数据类型和引用类型    基本数据类型的值;引用类型的内存地址    a == b
.equals()    引用类型(尤其是已重写 equals() 的类)    内容(在未重写时是比较引用地址)    s1.equals(s2)
何时使用

    基本数据类型:直接使用 ==。
    引用类型:若比较是否引用同一对象,用 ==;若要比较内容相等性,用 .equals()。

特殊情况:字符串常量池

在 Java 中,字符串常量池(String Pool)使得字符串常量可能被复用,例如:

java

String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);  // 输出 true,因为它们引用相同的池中对象

由于 s1 和 s2 指向同一个字符串常量池中的 "hello",所以 s1 == s2 返回 true。然而,这仅适用于使用字符串字面值(不使用 new 关键字)创建的字符串。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3043151/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    603012