== 和 equals 的区别

1. == 运算符

  • 比较的是对象的引用(内存地址),判断两个对象是否指向堆内存中的同一块地址。

  • 对于基本数据类型(如 int, char, double 等),== 直接比较的是值是否相等。

  • 对于引用类型(如 String, 自定义类对象等),== 比较的是引用是否相同(即是否为同一个对象)。

java 复制代码
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = s1;

System.out.println(s1 == s2); // false(不同对象,地址不同)
System.out.println(s1 == s3); // true(s3 和 s1 指向同一个对象)

2. equals() 方法

  • 默认行为与 == 相同 (比较引用),但通常被重写(Override)用于比较对象的内容是否逻辑相等。

  • 例如,String、Integer 等类重写了 equals(),使其比较的是对象的值而非引用。

  • 如果自定义类需要比较内容,必须重写 equals()(同时通常也要重写 hashCode())。

    java 复制代码
    String s1 = new String("hello");
    String s2 = new String("hello");
    
    System.out.println(s1.equals(s2)); // true(String 重写了 equals,比较字符内容)

    3. 总结

  • 共同点:都是用于比较操作

  • 不同点:用 == 判断是否为同一个对象(或基本类型的值相等)。

用 equals() 判断对象的内容是否逻辑相等(需注意是否被正确重写)。

相关推荐
学长毕设2 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
SL_staff2 小时前
离散制造排程破局:JVS-APS 四步闭环落地实践(开发者视角)
java·产品·全栈
这个昵称不容易2 小时前
SpringBoot 美容院管理系统:232个Java文件315个接口,5套角色从预约到发货一整条链路
java·springboot·毕设
装不满的克莱因瓶3 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
文丑颜不良啊3 小时前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊3 小时前
LeetCode2321~2340题目解析
java·leetcode
驭渊的小故事4 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang4 小时前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
vipxieliang4 小时前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路4 小时前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试