2015-09-20 3 views
-1

Зачем возвращать false?Ключ Java HashMap не найден?

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) - это возвращение верно
tags_tbl.containsKey (0x8a) - это возвращение правда

0x8a = -118 в дес

+1

Является ли '0x8a' интерпретированным как неподписанный' byte' или неподписанный 'int'? –

+0

0x8a - это байт, буфер [i] –

+1

Это определенно не так. Если это байт, ваш код не будет компилироваться. Это 'int' (вставляется в« Integer »). –

ответ

0

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 
+0

thx. Как я могу инициализировать HashMap в качестве байта? HashMap ? –

+0

Если вы хотите, чтобы ключ был байтом, объявите его таким образом. Если вы предпочитаете ключ Integer, см. Отредактированную версию моей программы. Существует неявное преобразование бокса в Integer, если вы используете (байт) 0x8a в качестве ключа для HashMap . –

Смежные вопросы