【问题标题】:Java HashMap key not found?找不到 Java HashMap 键?
【发布时间】:2015-09-20 17:41:44
【问题描述】:

为什么返回 false?

private static final HashMap<Integer, Integer> tags_tbl = new HashMap<Integer, Integer>() {{
    put(0x01, 1);
    put(0x8a, 1);
}};

tags_tbl.containsKey(-118) - 这返回 false,为什么?
tags_tbl.containsKey(1) - 这返回 true
tags_tbl.containsKey(0x8a) - 这返回 true

0x8a = -118 十进制

【问题讨论】:

  • 0x8a 被解释为无符号byte 还是无符号int
  • 0x8a 是一个字节,缓冲区[i]
  • 绝对不是。如果是byte,您的代码将无法编译。这是一个int(装箱到Integer)。
  • 0x8a = -118 in dec你能解释一下你为什么这么认为吗?

标签: java hashmap integer byte


【解决方案1】:

0x8a 是 int 文字,十进制值 138。如果您希望将其视为 byte,并在转换为 int 期间扩展符号,请先转换:

public class Test {
  public static void main(String[] main) {
    System.out.println(new Integer(0x8a));
    System.out.println(new Integer((byte)0x8a));
  }
}

打印:

138
-118

【讨论】:

  • 谢谢。我如何将 HashMap 初始化为字节? HashMap ?
  • 如果您希望密钥为 Byte,请以这种方式声明。如果您更喜欢整数键,请参阅我的程序的编辑版本。如果您使用 (byte)0x8a 作为 HashMap 的键,则存在到 Integer 的隐式装箱转换。
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 2016-04-10
  • 2023-03-09
  • 1970-01-01
  • 2011-10-09
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多