面试题1:==和equals的比较

面试题:==和equals的区别?

  1. ==
    ==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
  2. equals
    object中默认也是采用== 比较。通常会重写。如果没有重写,通常equals和==也是差不多的
java 复制代码
public boolean equals(Object obj) {
        return (this == obj);
}

例如String的重写

java 复制代码
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

其中StringUTF16的比较方法如下:

java 复制代码
```java
@HotSpotIntrinsicCandidate
    public static boolean equals(byte[] value, byte[] other) {
        if (value.length == other.length) {
            int len = value.length >> 1;
            for (int i = 0; i < len; i++) {
                if (getChar(value, i) != getChar(other, i)) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

实际本质上重写的是比较字符串里面每个字符是否相等

  • 如果长度不相等,直接返回false
  • 如果长度相等,就逐个比较字符,一旦就不相等,返回false,如果所有都相等返回true
  1. 案例测试
相关推荐
karry_k1 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k1 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
SamDeepThinking5 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
用户852495071845 小时前
解密 JavaScript 中的 this:谁才是真正的调用者?
javascript·面试
Heo5 小时前
Vite进阶用法详解
前端·javascript·面试
洛卡卡了5 小时前
Claude Code rules 要怎么用,团队协作时如何统一代码规范呢?
面试·agent·claude
她的男孩8 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
不好听6139 小时前
JavaScript 的 this 到底指向谁?
javascript·面试
烬羽9 小时前
面试官:聊聊 LocalStorage 和 this 指向?看这篇就够了
面试·程序员