这个交换还挺难啊,要是在Integer缓存范围内,直接修改反射修改,会把缓存池中的Integer值都改了,要new Integer对象来改。参考代码: public static void swap(Integer a,Integer b) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ Field declaredField = Integer.class.getDeclaredField("value"); declaredField.setAccessible(true); /** * 错误写法 * int bVal=b.intValue(); * System.out.println("bVal:"+bTemp); // 2 * System.out.println("bVal->Integer->int:"+Integer.valueOf(bTemp).intValue()); // 1 * declaredField.set(a, bTemp); // bTemp装箱,取到缓存池中值为1的Integer(2)对象。a:1 */ Integer bTemp=new Integer(b.intValue()); declaredField.set(b, a.intValue()); System.out.println("bVal:"+bTemp); System.out.println("bVal->Integer->int:"+Integer.valueOf(bTemp).intValue()); declaredField.set(a, bTemp); }
1 1

相关推荐

迷茫的大四🐶:价格这么低都能满了?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务