Java反射更新号

Java反射更新号,java,reflection,Java,Reflection,我不熟悉Java反射。我正在尝试制作一个程序,其中两个数字相加可以得到自定义结果。代码如下: public class MoreTest { public static void main(String[] args) { try { Field field = Integer.class.getDeclaredField( "value" ); field.setAccessible( true );

我不熟悉Java反射。我正在尝试制作一个程序,其中两个数字相加可以得到自定义结果。代码如下:

public class MoreTest {

    public static void main(String[] args) {

        try {
            Field field = Integer.class.getDeclaredField( "value" );
            field.setAccessible( true );
            field.setInt(Integer.valueOf(2),2);             

        } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
            e.printStackTrace();
        }

        System.out.println( 2 + 4 ); // should print 8
    }

}

在上面的代码中,我能做些什么来打印我需要的输出?

那么您只需将2重写为。。。2而不是4

尝试替换此:

field.setInt(Integer.valueOf(2), 2);
由此

field.setInt(Integer.valueOf(2), 4);
在代码中

然后:

Integer a = 2;
System.out.println( a + 4 ); // will print 8
这是因为
整数a=2
触发自动装箱,编译器将其替换为
整数a=Integer.valueOf(2),它是您先前修改为具有值4的缓存中的实例

表达式中使用了
a+4
自动拆箱;编译器将其替换为
a.intValue()+4


在表达式
2+4
(使用数值
int
literals)中,值都是原语,并且不使用任何
Integer
类实例。

是否尝试生成一个?为什么希望打印它8@RC.对正如我在那里读到的一样,我也在尝试同样的方法,只是在玩弄反射来了解它的力量。因此,你的问题如bowmore中所述,回答字段上的“set”,它是
setInt(目标对象,新值)
,当然你必须使用
Integer
对象(另请参见为什么这是可能的)它不是这样打印的,但是当我进入
System.out.println((整数)2+(整数)2)时,它可以工作。如果我需要打印
2+2
应该是
5
,您能解释一下它是如何按照您的解决方案工作的吗。谢谢你不能让
2+2
打印5。这些数字由原语
int
类型支持,而不是
Integer
类支持