如何直接修改Integer包装类的值

大家都知道Integer包装类的值一般常规操作是修改不了,至于用new对象的方式创建的,大家可以看下hashcode值便知道了。 今天,给大家拓展下思路。我选择的是反射作为前提技术的修改方式,不过大家还阔以调用c去直接操作应该也是可以的。我就没尝试了。话不多说。我来给大家上代码操作下。

//初始化一个Integer对象
            Integer integer_test=123;
            /*
            *字符数组名 digits
            * final static char[] digits = {
                0 , 1 , 2 , 3 , 4 , 5 ,
                6 , 7 , 8 , 9 , a , b ,
                c , d , e , f , g , h ,
                i , j , k , l , m , n ,
                o , p , q , r , s , t ,
                u , v , w , x , y , z
            };
            * 利用反射获取Integer包装类的字符数组,这个字符数组,组装成了
            * 可以包括任何在int类型范围内的数字。为它们提供一个引用。我们现在
            * 就是要修改这个数组,完成对引用对应数值的引用,从而改变值
            * */
            Field field =integer_test.getClass().getDeclaredField("digits");
            field.setAccessible(true);
            char[] chars=(char[])field.get(integer_test);
            //修改引用1的值,以下类推
            chars[1]=2;
            chars[2]=3;
            chars[3]=5;
           System.out.println(integer_test);//原来值123 ,打印结果235

但是,有一个缺点。这个改动是和程序的生命周期是一样的。所以不推荐使用,大家可以尝试用c或者序列化去改变都应该可以。

经验分享 程序员 微信小程序 职场和发展