1、int 和 Integer 有什么区别,Integer的值缓存范围
int是基本类型,Integer是int的包装类。Integer的缓存范围默认是-128到127.最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。Integer对象内部维护了一个IntegerCache静态内部类。注意只有short long int byte char会缓存,注意范围。Integer具体讲解
2、装箱和拆箱
装箱:把基本类型封装为对象。拆箱:对象转换为基本类型的值。
涉及到运算的时候就会自动拆箱,如:
Integer a = 1;
Integer b = 2;
Long g = 3L;
System.out.println(g==(a+b));
System.out.println(g.equals(a+b));
返回结果是true和false
==如果有运算,比较的是基本类型的数值,不是对象,a+b会自动拆箱为基本类型,然后==会自动比较Long对象的数值,所以==为true;
equals方法并不会进行类型转换所以返回false.深入剖析Java中的装箱和拆箱
3、反射的用途及实现原理
反射是指获取类的属性、方法和对象,并可以调用对象的方法。
反射的用途有IOC、动态代理、动态加载类
如果调用public以外的方法需要设置setAccessible(true),双检锁和静态内部类单例可以反射破解。
通过newInstance方法调用class对象的构造方法获取对象实例,
4、说说自定义注解的场景及实现
jdk一共有三个注解@Override @Deprecated @SuppressWarnings
如果要自定义注解的话需要用元注解@Targer@Retention@Inherited@Documented
通过反射的Class对象的getAnnotation方法获取注解实现类
注解的话可以了解下lombok插件 注解的妙用
5、HTTP协议
6、Java序列化和反序列化
对象实现Serializable 接口可以进行序列化。
transient可以阻止变量序列话,反序列化后获取的是初始值。
通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化。
序列化 ID不一致也不能反序列化,序列化并不保存静态变量。
arraylist为了序列化时不保存数组里的null值重写了writeObject和readObject方法。arraylist序列化优化
7、Object类中常见的方法,为什么wait notify会放在Object里边?
wait notify必须是在synchronized代码块里,因为是对持有当前锁的线程进行操作。因为锁住的是任意对象,所以任意对象都可以使用wait方法。sleep方法的线程不会释放对象锁。