在 Java 中使用 String 和 Object 的 equals() 方法

2024-03-13

Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));

它返回false。它可以返回true,如果评论被删除。


为什么同样的事情不适用于String class?

String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));

它返回true。为什么? (因为String使用实习生或其他涉及的东西?)


Because 字符串的 equals() http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#equals%28java.lang.Object%29比较的是内容,而不是对象本身。

公共布尔等于(对象 anObject)

将此字符串与指定对象进行比较。当且仅当参数不为 null 并且是一个时,结果为 trueString表示与此对象相同的字符序列的对象。

    /* String.equals() */
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

(链接到来源字符串.equals() http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.equals%28java.lang.Object%29)

等于对象 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals%28java.lang.Object%29:

类的 equals 方法Object在对象上实现最具辨别力的可能等价关系;也就是说,对于任何非空参考值x and y,此方法返回 true 当且仅当x and y引用同一个对象(x == y有价值true).

/* Object.equals() */
public boolean equals(Object obj) {
    return (this == obj);
}

(链接到来源对象.equals() http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Object.java#Object.equals%28java.lang.Object%29)

另外,不要忘记合同equals()功能:

equals 方法在非空对象引用上实现等价关系:

  • It is 反射性的:对于任何非空参考值x, x.equals(x)应该返回 true。
  • It is 对称的:对于任何非空参考值x and y, x.equals(y)应该返回 true 当且仅当y.equals(x)返回真。
  • It is 及物的:对于任何非空参考值x, y, and z, if x.equals(y)回报true and y.equals(z)回报true, then x.equals(z)应该返回true.
  • It is 持续的:对于任何非空参考值x and y, 多次调用x.equals(y)持续回报true或持续返回false,前提是对象的 equals 比较中使用的信息没有被修改。
  • 对于任何非空参考值x, x.equals(null)应该返回false.

还推荐阅读:

  • 对象.hashCode() http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#hashCode%28%29
  • 有效的 Java (布洛赫) https://rads.stackoverflow.com/amzn/click/com/0321356683
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中使用 String 和 Object 的 equals() 方法 的相关文章

  • 编码java Cookie值

    应如何对 Java Cookie 对象的实际值进行编码 我无法传递 等字符或 US ASCII 之外的任何字符 Br 乔因斯 如何并不重要 但通常Base64 http en wikipedia org wiki Base64应该可以正常工
  • Dom解析器和Xerces解析器之间的区别

    嘿 谁能告诉我 Dom 解析器 和 Xerces 解析器 之间有什么区别 两者各有什么优点和缺点 Xerces isDOM 解析器 它是 Java 或 C 中的 Apache 实现 您需要考虑的两个是 SAX 和 DOM DOM 在内存中创
  • 用 Java 创建 PDF 的缩略图

    我正在寻找一个 Java 库 它可以获取 PDF 并从第一页创建缩略 图 PNG 我已经看过 JPedal 但其疯狂的许可费完全令人望而却步 我目前正在使用 iText 来操作 PDF 文件 但我相信它不会生成缩略图 我可以在命令行上使用
  • 在intellij中为java启用ssl调试

    从我的问题开始 上一期尝试通过 tls ssl 发送 java 邮件 https stackoverflow com questions 39259578 javamail gmail issue ready to start tls th
  • 切换枚举值:case 表达式必须是常量表达式

    我有一个具有以下结构的枚举 public enum Friends Peter Peter von Reus Engineer Ian Ian de Villiers Developer Sarah Sarah Roos Sandwich
  • Spring Boot 动态重置数据源

    当 Spring 配置文件或自定义数据库属性文件中的数据库名称 密码或主机名等数据库属性发生更改时 我尝试更新 Spring Boot 中的数据源 当属性更改时 应用程序必须通过侦听属性更改来自行更新 一旦数据库配置发生更改 我就使用 Sp
  • Juno - Java 构建路径 - 项目无法读取或不是有效的 ZIP 文件

    我收到此错误 说明 资源路径 位置类型 所需库的存档 项目 Home 中的 src Program java 无法读取或无效 ZIP 文件主页 构建路径 构建路径问题 是什么原因导致此错误以及如何修复它 请按照以下导航 Right Clic
  • Hibernate OneToMany 列表中的重复结果

    我已将 1 N 关系与 OneToMany 列表映射 但当我访问该列表时 由于 OUTER JOIN 结果会重复 映射如下所示 Entity public class Programmer ElementCollection fetch F
  • 添加月份时的 Java 日历/日期问题

    如果我们在当前日期 2013 年 5 月 31 日星期五 18 33 00 IST 2013 中添加 1 个月 则会产生 2013 年 6 月 30 日星期日 18 33 00 国际标准时间 如果我们减去 1 个月 则得出 2013 年 5
  • HashSet 中的并行流不并行运行

    我有想要并行处理的元素集合 当我使用List 并行性有效 但是 当我使用Set 它不并行运行 我编写了一个代码示例来显示该问题 public static void main String args ParallelTest test ne
  • Java 工具创建的 WSDL 文件的 WCF 序列化问题

    我的团队的任务是让几个内部开发的 NET 客户端应用程序连接到一些新的 Java Web 服务 Java Web 服务是第三方 供应商提供的 WSDL 文件 我们的团队修改 控制的能力有限 这意味着我们可能有权要求我们的供应商对 WSDL
  • Java - 多线程代码在更多内核上运行速度并不更快

    我只是在 4 核机器上运行一些多线程代码 希望它比在单核机器上更快 想法是这样的 我有固定数量的线程 在我的例子中每个核心一个线程 每个线程执行一个Runnable形式 private static int data data shared
  • 以字符集安全的方式获取 Windows 上的进程列表

    这个帖子 https stackoverflow com questions 54686 how to get a list of current open windows process with java给出了一个在 Windows 下
  • Java如何使用私钥文件而不是PEM来解密?

    使用 Java 和 Bouncy Castle 1 52 我可以使用以下代码通过 PEM 证书加载私钥 我还有一个相同的 PKCS8 格式的 private key 文件 直接使用private key文件而不是PEM的代码是什么 Stri
  • 是否有办法排除从父 POM 继承的工件?

    可以通过声明排除依赖项中的工件
  • 不使用函数检测字符串结尾

    如何找出 PHP 字符串的结尾 我有一项任务 无需任何函数即可识别字符串长度 我知道 PHP 中的所有字符串都以空字节结尾 0 但我不知道最后一个符号之后的字符串元素 例如 这将不起作用 while a length 如何在不使用任何函数的
  • java中如何将字符串日期转换为时间戳?

    我想在java中将字符串日期转换为时间戳 我编写了以下编码 我声明 date1 的日期是 7 11 11 12 13 14 SimpleDateFormat datetimeFormatter1 new SimpleDateFormat y
  • org.gradle.api.tasks.TaskExecutionException:任务':app:transformClassesWithDexForDebug'执行失败

    Due to 65K我的项目中出现错误 我需要它迁移到 Android Studio 在跑步的时候 gradlew assemble调试 我收到错误 Execution failed for task app transformClasse
  • 如何从 InputStream 读取一行而不缓冲输入? [复制]

    这个问题在这里已经有答案了 我有一个输入流 其中包含一行字符串 然后是二进制数据 如果我使用读取该行new BufferedReader new InputStreamReader inputStream 二进制数据也正在被读取并且不能被重
  • 在哪里可以找到所有 HQL 关键字的列表?

    在哪里可以找到所有 HQL 关键字的列表 在完整的 Hibernate 源代码下载中 有一个grammar hql g文件 这是ANTLR http www antlr org 语言定义 您可以从官方GitHub源码仓库查看该文件的最新版本

随机推荐