首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >==与equals 的分析

==与equals 的分析

作者头像
Han.miracle
发布2025-12-22 14:10:33
发布2025-12-22 14:10:33
130
举报

1.1 ( == )是否比较引用同一个对象 注意:对于内置类型,比较的是变量中的值;对于引用类型比较的是引用中的地址。

代码语言:javascript
复制
public static void main(String args) {
int testA = 10;
int testB = 10;
int testC = 20;

//==对于基本引用类型变量,比较两个变量中存储的值是否相等
// ==的返回值是false 和 true
System.out.println(a == b);  //true
System.out.println(a == c);  //false

//对于引用类型的变量,==比较两个引用变量引用的是否为同一个的对象

1.2 equals 方法:按照字典序比较(Unicode编码值大小排序) String类重写了父类的Object中的equals方法,object中equals 默认按照==比较,String重写equals方法后,按照如下规则进行比较。

代码语言:javascript
复制
public static void main(String[] args) {
String  testA = "hello;
String testB = "hello;
String testC = "Hello;
System.out.println(testA.equals(testB));
System.out.println(testB.equals(testC));
// equals⽐较:String对象中的逐个字符
 //判断引用的是否是同一个对象,放置的内容
}

==

基本类型(int、double、char…):== 比较的是值。

代码语言:javascript
复制
int a = 10;
int b = 10;
System.out.println(a == b); // true
  1. == 的工作方式

在 Java 中,== 是一个 运算符,不是方法。它的行为取决于 操作数的类型:

👉 情况 A:两边都是基本类型(int、double、char…)

比较的是 数值。

int a = 10; int b = 10; System.out.println(a == b); // true(数值相等)

👉 情况 B:两边都是引用类型(对象)

比较的是 引用地址,即是否指向同一个对象。

String s1 = new String(“abc”); String s2 = new String(“abc”); System.out.println(s1 == s2); // false(不是同一个对象)

👉 情况 C:一边是引用类型,另一边是基本类型

代码语言:javascript
复制
public boolean contains(int key) {
    ListNode cur = head;
    while (cur != null) {
        if (cur.val == key) {   // 这里比值
            return true;
        }
        cur = cur.next;
    }
    return false;
}

规则:

Java 会自动拆箱/装箱,把包装类转换为基本类型,然后用情况 A 的规则比较数值。

如果是自定义对象里有 int val,那 cur.val 本身就是一个基本类型 int。

举例:

代码语言:javascript
复制
Integer x = 100;  // 包装类
int y = 100;      // 基本类型
System.out.println(x == y); // true,因为 x 自动拆箱成 int,再比数值

注意:

代码语言:javascript
复制
所以在你的链表 contains 里:
if (cur.val == key) { ... }
cur.val 是 int(基本类型)。
key 是 int(方法参数)。

两个都是基本类型 → 用 == 比较数值。 引用类型(对象、数组、字符串…):== 比较的是 引用(地址),即两个变量是否指向同一个对象。

代码语言:javascript
复制
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // false,不是同一个对象

equals

默认继承自 Object,等价于 ==(比较地址)。但很多类重写了 .equals(),改成比较“内容”。比如 String、Integer、ArrayList 等。 用法上和 == 类似:

a.equals(b)

代码语言:javascript
复制
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2)); // true,内容一样
1.3compareTo 方法:按照字典序进行比较

区别在语义:

如果类 没有重写 equals,默认就是比较地址(和 == 效果一样)。

如果类 重写了 equals,通常会比较内容。

代码语言:javascript
复制
String s1 = new String("abc");
String s2 = new String("abc");

System.out.println(s1 == s2);      // false(地址不同)
System.out.println(s1.equals(s2)); // true(String 重写了 equals,比内容)

== 基本类型:值 引用类型:地址 .equals() 默认:地址 被重写后:内容

在 Java 里是 比较两个对象大小的标准方法,属于 Comparable 接口。常用于排序。 它是用来 比较两个东西的大小 的方法。 与equals 不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。 具体比较方式: 1.相同长度先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值 2.不同字符长度且如果前K个字符相等(k为两个字符长度最小值),返回值两个字符串的长度差值

代码语言:javascript
复制
public class TestString {
    public static void main(String[] args) {
        String testA = new String("hellof");
        String testB = new String("hellob");
        String testC = new String("hellofra");
        String testD = new String("hellofta");

        String testE = new String("abd");
        
        System.out.println(testA.compareTo(testB));//4
        System.out.println(testA.compareTo(testC));//-2
        System.out.println(testA.compareTo(testD));//-2
        System.out.println(testA.compareTo(testC));//-2 字符不等
        System.out.println(testC.compareTo(testD));//-2 r-t
         System.out.println(testA.compareTo(testE));//7
         //第一个就不等了。所以第二条规则就两个字符串的第一个字符直接比较是7
    }
}

1.4 compareToIgnoreCase 方法:与compareTo的方式相同,但是忽略大小写比较

代码语言:javascript
复制
public static void main(String[] args) {
String testString1 = new String("hello");
String testString1 = new String("hg");
String testString1 = new String("Hello");
String testString1 = new String("helloworld");
System.out.println(testString1.compareToIngoreCase(testString2));//不同输出2
System.out.println(testString1.compareToIngoreCase(testString3));//相同0
System.out.println(testString1.compareToIngoreCase(testString4));//前K个字符完全相同,输出5
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ==
  • equals
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档