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


 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 位置进行了对换,所以答案也就不一样了。

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

聊聊、Integer 封装特性的更多相关文章

  1. Integer封装与拆箱

    Integer封装与拆箱 简介: 目录: Integer自动封装的陷阱 Integer自动拆箱机制 Integer自动封装的陷阱 public class IntegerDemo { public s ...

  2. java 使用抽象工厂封装特性方法

    1.创建抽象类:封装含有相同特性的方法. */ public abstract class AbstractPayment { public abstract String progress() th ...

  3. javaSE_07Java中类和对象-封装特性

    一.谈谈什么是面向对象的思维 理解面向对象,重点是要思考以下的问题 面向过程 vs 面向对象 Ø 谈谈什么是面向过程的编程思想? Ø 为什么有面向过程还要有面向对象? Ø 谈谈什么是面向对象的编程思想 ...

  4. python之路----面向对象的封装特性

    封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种只让自己的对象能调用自己类中的方法 狭义上的封装 —— 面向对象的三大 ...

  5. Java之封装特性

    Java中的三大特性:继承,封装,多态: 其中封装概念:封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口. 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的 对象 ...

  6. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...

  7. javaSE_07Java中类和对象-封装特性--练习

    1.编写封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几 ...

  8. 【学习】js学习笔记:对象的遍历和封装特性

    1.对象的属性访问: 对象.属性 对象[属性],但中括号中必须是字符串 2.属性的遍历: for in方法举例: var ren={}; ren.name="名字"; ren.ea ...

  9. Integer诡异特性

    package 代码测试; public class ceshi { public static void main(String[] args) { Integer i1=100; Integer ...

随机推荐

  1. hihoCoder hiho一下 第十二周 #1055 : 刷油漆 (树上DP)

    思路: 只能刷部分节点数m,总节点数n.如果m>=n那么就可以全刷了,那就不用任何算法了.如果m<n那么就要有取舍了.用DP思路,记录下每个节点如果获得到1~m个选择所能获得的最大权值.这 ...

  2. 流媒体 5——MPEG声音

    1. 听觉系统的感知特性: MPEG声音的数据压缩和编码不是依据波形本身的相关性和模拟人的发音器官的特性,而是利用人的听觉系统的特性来达到压缩声音数据的目的,这种压缩编码称为感知声音编码. 许多科学工 ...

  3. python_30_购物车复习

    prodcut_list=[ ('Iphone', 5800), ('Mac Pro', 9800), ('Bike', 800), ('Watch', 10600), ('Coffee', 31), ...

  4. 【luogu P5022 旅行】 题解

    题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...

  5. gulp的常用插件

    gulp和webpack的差别:https://www.cnblogs.com/lovesong/p/6413546.html var gulp = require('gulp'); var del ...

  6. 1047: [HAOI2007]理想的正方形

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4075  Solved: 2277[Submit][Status][Discuss] Descript ...

  7. PowerDesigner导入Excel模板生成实体

        在Excel里整理好的表模型数据,可直接导入PowerDesigner.此功能通过PowerDesigner的脚本功能来实现,使用起来也简单.具体操作方法:     打开PowerDesign ...

  8. CentOS---JDK安装与配置

    1.先查看一下CentOS中存在的jdk安装包信息 # rpm -qa | grep java 查看CentOS安装的jdk版本 #java -version 2.分别执行以下命令将所有相关包都删除 ...

  9. node 日志分割-pm2-logrotate

    使用pm2-logrotate进行pm2日志切割,测试是按照文件大小1k切割: 安装 pm2 install pm2-logrotate 设置 重启 截图 截图是按照文件大小分割,如果文件小于设置分割 ...

  10. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...