Java 数组比较

2023-11-23

在 Java 中工作,假设我有两个对象,这要归功于obj.getClass().isArray(),我知道都是数组。进一步说,我想将这两个数组进行相互比较——可能通过使用Arrays.equals。有没有一种优雅的方法可以做到这一点,而无需求助于一个详尽的 if/else 树来找出哪种风格Arrays.equals需要使用吗?我正在寻找比这更不碍眼的东西:


      if (obj1 instanceof byte[] && obj2 instanceof byte[]) {
         return Arrays.equals((byte[])obj1, (byte[])obj2);
      }
      else if (obj1 instanceof boolean[] && obj2 instanceof boolean[]) {
         ...

您可以使用反射。

public static boolean arrayEquals(Object arr1, Object arr2) throws Exception {
    Class<?> c = arr1.getClass();
    if (!c.getComponentType().isPrimitive()) {
        c = Object[].class;
    }
    Method m = Arrays.class.getMethod("equals", c, c);
    return (Boolean) m.invoke(null, arr1, arr2);
}

反射仅用于在运行时找到正确的方法,而不是您想要避免的碍眼的情况;实际上Arrays.equals方法应该运行得很快。

显然生产版本需要更强大的异常处理。您可能还想使用deepEquals(Object[], Object[])代替equals(Object[], Object[])对于非原始数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 数组比较 的相关文章

随机推荐

  • SVG 中的下标和上标

    我正在尝试使用以下代码使用 SVG 显示下标和上标从这个网站
  • Oracle 将列移动到第一个位置

    有没有办法将 Oracle 表中的列从最后一个位置移动到第一个位置 有人删除了 ID 列并重新创建了它 所以现在它到了最后 这是一个问题 因为我们的一些 PHP 脚本使用第一列作为标识符 一个抽象模型以及超过 100 个其他模型使用这个基础
  • 如何在 Google Colaboratory 中以编程方式清除 Python 输出?

    这个问题特定于 Google Colaboratory 虽然某些解决方案可能在普通的 Python 解释器中工作 但 Google Colaboratory 似乎不允许我以编程方式清除 Python 解释器输出 我已经尝试过但不起作用的解决
  • 再次迭代元组...

    我从事 C 工作已经有一段时间了 但我对模板并不熟悉 最近 我尝试编写一个类来包装std vector
  • 进行 json.dump 时如何显式设置回车符?

    我的 python 脚本生成 json 文件 我必须支持这个Python文件在Windows和Linux上工作 问题是windows和linux上的回车符不同 当我在 Windows 上运行此代码时 它输出 CRLF json 当我在 Li
  • Flutter找不到android sdk

    我刚刚尝试安装 flutter 因为我已经安装了 android studio 和 android sdk 所以我只是按照 flutter 的安装进行操作 这是我的问题 当我跑步时 flutter doctor 它告诉我 Flutter C
  • 在 MVC 中处理多个角色 - 基于操作的辅助功能

    我目前有一个项目 我似乎遇到了有关角色的问题 我想我会得到一些关于如何最好地处理该问题的意见 系统将需要可编辑 灵活的角色 不仅控制特定区域的访问 还控制系统功能的使用 添加用户 编辑用户 查看报告等 系统当前允许用户拥有多个角色 每个角色
  • 黑莓 URL 编码器

    我需要在 Blackberry 中使用 HTTP GET 请求对 URL 进行编码 任何人都可以帮助我找到如何实现这一目标 为什么不使用 RIMURL编码的帖子数据 private String encodeUrl String hsURL
  • 如何在TextureView上使用相机预览录制视频

    我一直在一些 Android 4 0 设备上使用TextureView 例如 我尝试开发一个简单的应用程序 它可以录制视频并使用TextureView进行预览 然而 据我阅读Android API文档 标准MediaRecorder需要一定
  • 编织错误。未找到对象

    我有一个未清理的dataset 所以 我已将其导入到我的 R 工作室 然后当我运行时nrow adult 在 rmarkdown 文件中并按ctrl Enter它有效 但是当我按下knit出现以下错误 Answer recommended
  • 处理 DateTime DBNull

    我在 SO 上看到过很多很多版本 但似乎没有一个能完全满足我的需求 我的数据来自供应商数据库 该数据库允许日期时间字段为空 首先 我将数据放入数据表中 using SqlCommand cmd new SqlCommand sb ToStr
  • 使用 vba 将格式化文本复制到 access 中

    我需要将 Word 中的格式化文本保存到 Access 数据库中 到目前为止 我已经设法弄清楚如何在访问字段中存储格式化文本 在表中创建备注字段并将文本格式设置为富文本 搜索SO我还没有找到关于如何将所述文本从word传输到Access的解
  • 为什么百分比填充/边距在 Firefox 和 Edge 中的 Flex 项目上不起​​作用?

    我想在弹性盒内有一个方形 div 所以我用 outer display flex width 100 background blue inner width 50 background yellow padding bottom 50 di
  • 在另一个线程(不是主线程)中创建窗口

    我有一个功能 HWND createMainWindow P2p Socket Machine toSend HWND hMainWnd CreateWindow L Class LPCWSTR nameOfConference c str
  • NextJS:动态 router.pathname 不显示路径,而是显示文件名 - 如何获取路径中的单词?

    我使这个示例尽可能简单 如果需要更多信息来解决 我可以稍后添加更多代码 我在 nextJS 中使用动态路由 我的应用程序根据通过 API 输入动态路由的关键字从 Twitter 中提取结果twitter v2 package 我正在尝试使用
  • Java基于两列排序

    可以说我有这样的表 String Int1 Int2 foo 5 0 faa 4 1 zaa 0 1 zoo 4 2 laa 4 3 loo 1 4 我想要得到的是这样的表 String Int1 Int2 foo 5 0 laa 4 3
  • ActiveRecord 虚拟属性作为记录属性

    我遇到了 to json 未渲染我的虚拟属性的问题 class Location lt ActiveRecord Base belongs to event before create generate oid validates asso
  • PyQtGraph 打开然后立即关闭

    我正在运行文档中的一些基本代码 import pyqtgraph as pg import numpy as np x np arange 1000 y np random normal size 3 1000 plotWidget pg
  • bash zcat 头导致管道失败?

    set eu VAR zcat file gz head n 12 工作正常 set eu o pipefail VAR zcat file gz head n 12 导致 bash 失败退出 这是如何导致管道故障的 请注意 file gz
  • Java 数组比较

    在 Java 中工作 假设我有两个对象 这要归功于obj getClass isArray 我知道都是数组 进一步说 我想将这两个数组进行相互比较 可能通过使用Arrays equals 有没有一种优雅的方法可以做到这一点 而无需求助于一个