You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何相同内容创建的org.apache.hc.core5.http.Header实例不相等?

为什么BasicHeader的断言会失败?

问题的核心原因很直接:

  • Apache HC Core5库中的BasicHeader类没有重写Object的equals()和hashCode()方法。默认的equals()只比较对象引用,而非头部的名称、值、敏感标记这些业务属性;默认的hashCode()则基于对象内存地址生成,每个新实例的哈希码都不同。
  • 所以哪怕你创建的两个BasicHeader参数完全一致,它们也是两个独立的对象,Assertions.assertEquals()会因为引用不相等而失败,哈希码自然也不一样。

解决方法

如果需要正确对比BasicHeader的内容,有两种可行方式:

  1. 手动逐一对比属性
BasicHeader h1 = new BasicHeader("name", "value", true);
BasicHeader h2 = new BasicHeader("name", "value", true);
Assertions.assertEquals(h1.getName(), h2.getName());
Assertions.assertEquals(h1.getValue(), h2.getValue());
Assertions.assertEquals(h1.isSensitive(), h2.isSensitive());
  1. 使用库内置的HeaderComparator工具类
import org.apache.hc.core5.http.HeaderComparator;

BasicHeader h1 = new BasicHeader("name", "value", true);
BasicHeader h2 = new BasicHeader("name", "value", true);
Assertions.assertTrue(HeaderComparator.INSTANCE.compare(h1, h2) == 0);

内容的提问来源于stack exchange,提问作者Martin WasGehtSieDasAn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:02:36