java - 为什么通过反射调用时自动装箱不使用 valueOf()?

标签 java autoboxing

据我了解,以下代码应打印 "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. Boxing Conversion :

If the value p being boxed is true, false, a byte, or a char in the range \u0000 to \u007f, or an int or short number between -128 and 127 (inclusive), then let r<sub>1</sub> and r<sub>2</sub> be the results of any two boxing conversions of p. It is always the case that r<sub>1</sub> == r<sub>2</sub>.

但是,如果通过反射调用方法,装箱值总是通过 new PrimitiveWrapper() 创建.

请帮助我理解这一点。

最佳答案

invoke总是返回一个新的Object。任何返回的原语都被装箱。

...if the [return] value has a primitive type, it is first appropriately wrapped in an object.

您的问题是适本地地证明了术语的歧义。即在包装期间,它确实使用 Boolean.valueOf(boolean) .

关于java - 为什么通过反射调用时自动装箱不使用 valueOf()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087689/

相关文章:

java - 如何从 WEB-INF 目录加载文件/属性?

java - 设置自定义字体时 ListView 变慢

java - 如何将其保存到 parse.com 数据库?

java - 拆箱问题

scala - 如何匹配 "boolean"类型和 "Boolean"类型的类?

java - 分配数字时出现 NullPointerException

java - 当传递给需要对象类型的方法时,整数将变为 Long

java - 在不区分大小写的情况下检查 ArrayList 是否包含某个字符串

java - 使用 StringBuilder 将多行 Printwriter 转换为 CSV 文件

java - JNI 新的原始类型