前几天在公司内部群,有人分享出了一道题,问谁能口算出来,他就膜拜那个人。题目如下:


 Class cache = Integer.class.getDeclaredClasses()[0];
Field mycache = cache.getDeclaredField("cache");
mycache.setAccessible(true);
Integer[] newcache = (Integer[]) mycache.get(cache);
newcache[132] = newcache[133];
int a = 2;
int b = a + a;
System.out.printf("%d", b);
 问最后打印出来是多少?

一眼看去就知道 int b = 4,int 是基本类型,它的值是改变不了的。问题在于后面的打印语句,printf 方法。

这个题目考了几个点,第一个是 Integer 封装,Integer 作为 int 的封装类,它里面有一个 cache 缓存,区间值 -128 到 127,为什么要有这个缓存呢?这个是为了提高 Integer 运算效率,如果满足区间条件,就直接获取缓存中的对象进行比较。例如:Integer i = 10;Integer m = 10;那么 System.out.println(i == m)输出什么呢?答案是:true。但是如果 Integer i = 128;Integer m = 128 呢?答案又是什么呢?答案是:false。第二个是 printf 方法,如果上面的例子是 System.out.println(b);那么答案又不一样了。因为 printf 需要将 int 自动封装成 Integer,然后输出,但是 Integer 通过反射机制将 132 和 133 位置进行了对换,所以答案也就不一样了。

具体的答案大家可以去试试,谢谢大家观看,希望有所帮助!

最新文章

  1. DNS枚举工具DNSenum
  2. Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决
  3. Eclipse中调试Android技巧
  4. [Python爬虫]cnblogs博客备份工具(可扩展成并行)
  5. Debian普通用户添加sudo权限
  6. C# WPF 从网络加载图片到byte[]数组中 Stream转byte[]代码
  7. Java面试题相关内容
  8. 【USACO 2.1.2】法雷序列
  9. mongod的主要参数有
  10. React中父组件与子组件之间的数据传递和标准化的思考
  11. java怎么连接mysql数据库
  12. Hexo博客部署-使用github作为保存中转仓库
  13. leetcode第一刷_Merge Intervals
  14. 洛谷 P1596 [USACO10OCT]湖计数Lake Counting
  15. 【JVM.12】线程安全与锁优化
  16. Redmine 删除 project 中的 public 选项
  17. 找回丢失的mysql服务的root用户的密码
  18. javascript中 try catch用法
  19. 批量复制windows文件夹下所有文件名
  20. wait() ,notify() ,notifyAll(),synchronized 和同步方法锁,对象锁的联系,关系,区别;

热门文章

  1. cms-帖子静态化
  2. [Asp.Net] web api 部署注意事项
  3. Mybatis-动态 SQL语句
  4. python_31_集合
  5. mysql 查询出 n小时 以前的数据
  6. Session 会话保持
  7. https://www.atlassian.com
  8. Class:向传统类模式转变的构造函数
  9. php中关于empty()函数是否为真的判断
  10. 洛谷 P2279 [HNOI2003]消防局的设立