找不到Java哈希映射键?

找不到Java哈希映射键?,java,hashmap,integer,byte,Java,Hashmap,Integer,Byte,为什么返回错误 private static final HashMap<Integer, Integer> tags_tbl = new HashMap<Integer, Integer>() {{ put(0x01, 1); put(0x8a, 1); }}; private static final HashMap tags\u tbl=new HashMap(){{ put(0x01,1); put(0x8a,1); }}; tags_tbl.

为什么返回错误

private static final HashMap<Integer, Integer> tags_tbl = new HashMap<Integer, Integer>() {{
    put(0x01, 1);
    put(0x8a, 1);
}};
private static final HashMap tags\u tbl=new HashMap(){{
put(0x01,1);
put(0x8a,1);
}};
tags_tbl.containsKey(-118)-此返回为假,为什么?
tags_tbl.containsKey(1)-此返回值为真
tags_tbl.containsKey(0x8a)-返回true


0x8a=-118在dec中0x8a是一个
int
literal的十进制值138。如果要将其视为
字节
,并在转换为
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

0x8a
是否被解释为无符号的
字节
或无符号的
int
?0x8a是字节,缓冲区[i]它肯定不是。如果它是一个
字节
,您的代码将无法编译。它是一个
int
(被装箱为
整数
)。
0x8a=-118在dec
中你能解释一下你为什么这么想吗?谢谢。如何将HashMap初始化为字节?HashMap?如果您希望密钥是字节,那么就这样声明它。如果您喜欢整数键,请参阅我的程序的编辑版本。如果使用(字节)0x8a作为哈希映射的键,则存在到整数的隐式装箱转换。