Java的Integer和int有什么区别?
- Ingeter是int的包装类,int的初值为0,Ingeter的初值为null
- Integer的值缓存范围[-128,127]
- 两个new出来的对象比较都为false。还是内存地址不一样。
- int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。
- 两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
- 无论如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false
Java包装类、自动装箱与拆箱知识总结
- 装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的
- Integer i = 5;JVM为我们执行了Integer i = Integer.valueOf(5);这就是Java的自动装箱。
- int j = i;//这样的过程就是自动拆箱
final, finally, finalize 的区别
- final用于修饰类、成员变量和成员方法
- final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用);
- Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法
- Final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的。
- Finally通常和try catch搭配使用,保证不管有没有发生异常,资源都能够被释放(释放连接、关闭IO流)
- Finalize是object类中的一个方法,子类可以重写finalize()方法实现对资源的回收。垃圾回收只负责回收内存,并不负责资源的回收,资源回收要由程序员完成,Java虚拟机在垃圾回收之前会先调用垃圾对象的finalize方法用于使对象释放资源(如关闭连接、关闭文件),之后才进行垃圾回收,这个方法一般不会显示的调用,在垃圾回收时垃圾回收器会主动调用。
String、StringBuilder、StringBuffer
- String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法
- String类其实是通过char数组来保存字符串的。
- 对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象
- StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized,不用多说,这个关键字是在多线程访问时起到安全保护作用的,也就是说StringBuffer是线程安全的。
Static 关键字
1、静态方法中不能访问类的非静态成员变量和非静态成员方法,在非静态成员方法中是可以访问静态成员方法/变量的
2、静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
3、static是不允许用来修饰局部变量。
面向对象
继承、封装、多态(重写和重载)