Integer实现原理及缓存机制

Java涉及知识点
  1. 装箱和拆箱
  2. 反射及设置对象访问权限原理
  3. 函数参数的值传递和引用传递
  4. Integer原理及缓存机制
  5. 实现一个函数来交换参数的两个值
1. 装包和拆包

java提供的基本类型以及其对于的包装类型

基本类型 对于包装类型
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
void Void

以Integer为例子介绍装箱和拆箱:”

装箱存在的情况:
int 赋值给Integer 即基本类型赋值给包装类型时

Integer i = 1; 等价于 Integer i = Integer.valueOf(1); java自动完成装箱操作

拆箱存在的情况:
int与Integer比较 及基本类型和包装类型比较时

Integer i = new Integer(1);

int j = 1;

i == j  //等价于 i.intValue() == j  i对象会自动拆箱int类型和j进行比较
2. 反射及设置对象访问权限原理

JAVA反射机制是运行过程中,任意实体都可可以知道这个实体类的对象的所有方法和属性信息
对于任何对象都可以调用它的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

这里我们反射的目标是修改某个类的private属性值。以Integer为例:

//获取Integer类对象的方式
//Class clazz = Class.forName("java.lang.Integer");

Class clazz = Integer.class;

//获取Integer类中私有属性value的域 getDeclaredField获取类本身对应的所有访问
//权限的属性  getField获取类以及父类所有的public属性
Field field = clazz.getDeclaredField("value"); 
field.setAccessible(true); //设置private域访问权限
Integer a = 1;
field.set(a, 2);//将a 对象中的value属性设置为2 

对象访问权限原理

反着访问对象的原理主要看Field类的setAccessible和set即可。一个设置域的可见性,一个设置属性值。

File类声明:public final
class Field extends AccessibleObject implements Member

//setAccessible源
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值