当前位置: 首页 > 知识库问答 >
问题:

Why Set允许重复字节整数和长值

袁奇逸
2023-03-14
Collection col=new LinkedHashSet();
col.add(new Long(65));
col.add(new Byte((byte) 65));
col.add(new Integer(65));
col.add("A");

System.out.println(col);

答:[65,65,65,A]但我料到了[65,A]

共有1个答案

周浩淼
2023-03-14

long实例永远不能等于integer实例,而integer实例永远不能等于byte实例,即使两者具有相同的数值。您放入set中的3个实例彼此不相等。

例如,请参见integerequals:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

两个实例必须具有相同的类型才能彼此相等(一个必要条件)。

 类似资料:
  • 问题内容: 我似乎无法使实例正常工作。我使用的代码如下: 子类 该代码输出 问题答案: 您需要覆盖。而不是这样做,您实现了一个带有signature 的方法。因此,您使用的是为相等性测试定义的默认方法。 默认实现基于对象标识,因此,该集合“允许”您添加两个在语义上相等的不同对象。

  • 我有 tyo 字节变量 如果我对它们求和,sum的值是整数。 为什么 b 是整数?

  • 这大约是两个操作数中转换为字节后两个整数的总和。我只是试图理解为什么以下输出在Java中完美运行: 后者在编译时失败: 除了用作操作数的int值之外,它们是相同的。在这两种情况下,结果都超出范围,但只有第二个代码段会抛出编译时错误(尽管其结果小于前一个)。为什么会这样?

  • 当我尝试在我的字段中添加十进制输入时,例如:12.54。它表示以下文本:请输入一个有效的值。两个最接近的有效值是12和13。 它不允许我在字段中键入十进制输入。。。。 我如何解决这个问题?

  • 我有 REGEX,我希望在下面排除某些字符。正确排除这些字符:£“~#¬|{} 但这些不是: @[]/?;: 因此,例如,test£test 被正确标识为无效,但test@test被错误地标识为有效。 在https://regex101.com/上测试发现问题在于括号,并指出我需要转义第一个([括号]和-[连字符],就像这样- ^[a-zA-z0-9!$%^ 有什么办法可以让这个正则表达式按照我想

  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码: