Насколько я понимаю, следующий код должен вывести "true"
, но когда я его запускаю, он выдает "false"
.
public class Test {
public static boolean testTrue() {
return true;
}
public static void main(String[] args) throws Exception {
Object trueResult = Test.class.getMethod("testTrue").invoke(null);
System.out.println(trueResult == Boolean.TRUE);
}
}
Согласно JLS §5.1.7. Конвертация бокса:
Если значение
p
будучи в штучной упаковке являетсяtrue
,false
, Аbyte
, илиchar
в диапазоне\u0000
до\u007f
, илиint
илиshort
номер между-128
и127
(включительно), то пустьr 1
иr 2
будет результаты любых двух боксерских преобразованийp
. Это всегда тот случай, когдаr 1 == r 2
.
Однако в случае метода, вызванного с помощью отражения, коробочное значение всегда создается с помощью new PrimitiveWrapper()
.
Пожалуйста, помогите мне понять это.