这个交换还挺难啊,要是在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); }

相关推荐

一只末影酱:分布式锁这个可以用zk,etcd 不用组件的话,直接用数据库唯一索引 算法出KMP的话,能不能让面试官换啊
字节跳动一面918人在聊 查看11道真题和解析
点赞 评论 收藏
分享
牛客网
牛客企业服务