侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

Java中字符串比较:== 和 equals() 的区别

2025-12-13 / 0 评论 / 4 阅读

题目

Java中字符串比较:== 和 equals() 的区别

信息

  • 类型:问答
  • 难度:⭐

考点

字符串比较,==运算符,equals方法

快速回答

在Java中比较字符串时:

  • == 运算符:比较两个对象的内存地址是否相同(是否同一个对象)
  • equals() 方法:比较两个字符串的内容是否相同(字符序列是否一致)
  • 最佳实践:比较字符串内容时必须使用 equals(),避免使用 ==
## 解析

原理说明

Java中字符串是对象类型:

  • == 运算符:比较两个对象的内存地址(引用是否指向堆中同一对象)
  • equals() 方法:String类重写了Object的equals(),改为逐个比较字符串的字符内容
  • 字符串常量池机制:字面量字符串(如"hello")会被放入常量池复用,影响 == 的结果

代码示例

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

System.out.println(s1 == s2);       // true(常量池同一对象)
System.out.println(s1 == s3);       // false(s3是新对象)
System.out.println(s1.equals(s2));  // true(内容相同)
System.out.println(s1.equals(s3));  // true(内容相同)

最佳实践

  • 比较字符串内容时必须使用 equals()
  • 使用equalsIgnoreCase()忽略大小写比较
  • 处理可能为null的字符串时:
    "hello".equals(str) 优于 str.equals("hello")(避免NullPointerException)

常见错误

  • 错误使用 == 比较内容:
    if (input == "exit") // 可能返回false
  • 未考虑大小写:
    "Hello".equals("hello") // 返回false
  • 未处理null导致崩溃:
    str.equals("text") 当str为null时抛出异常

扩展知识

  • 字符串常量池:JVM为字面量字符串设计的特殊内存区域,减少重复对象
  • intern() 方法:手动将字符串加入常量池(如s3.intern() == s1返回true)
  • StringBuilder/StringBuffer:可变字符串类,比较时需先toString()equals()