1、Java 中 == 、equals 和HashCode的区别
hashCode 是Object的方法,通过一系列的算法得到一个对象的hash值,这个位置代表的是这个对象在hash表中的位置,不同的对象可能hash值相同
equals 则是用来比较两个对象是否相等,即两个对象是否是同一个对象,当然我们可以通过重写该方法,让我们的对象在满足其他条件的情况下也返回true
== 只能用于基本数据类型的比较,比较的数据的值是否相等
2、int char long 各占多少个字节
char在java中是2个字节,java采用unicode,2个字节来表示一个字符,short 2个字节,int 4个字节,long 8个字节,float 4个字节,double 8个字节
3、Java多态
重写 重载 和继承
4、String、StringBuffer和StringBuilder的区别
String为固定长度的字符串,StringBuilder和StringBuffer为变长字符串;
stringBuffer是线程安全的,StringBuilder是非线程安全的;StringBuffer其方法都使用了synchronized关键字,性能与StringBuilder相比当然大打折扣
StringBuffer和StringBuilder的默认初始容量是16,可以提前预估好字符串的长度,进一步减少扩容带来的额外开销。
5、什么是内部类
定义在一个类内部的类,主要作用是隐藏属性、封装方法、可以独立继承
6、抽象类和接口区别
接口不能有私有的方法和变量,不能有方法的实现,Java1.8以后可以有default方法体,当时抽象类可以有自己的变量和实现方法
接口可以实现多继承,主要是为了约束子类的行为,抽象类更多是为了实现公共功能,然后再让子类自定义自己的部分。接口成员变量需要用static final修饰不可以修改。
抽象类可以没有抽象方法和属性
7、泛型中extends 和 super的区别
他两分别代表了上下边界
8、父类的静态方法能否被子类重写
不能,重写后就会被覆盖,想要调用父类的静态方法就只有用父类去调用
9、进程和线程的区别
进程是拥有资源和独立运行的最小单位,线程是进程当中一条执行流程,是程序执行流的最小单位,也是处理器调度和分派的最小单位,一个进程可以包含多个线程
10、final finally和finalize的区别
final 可以用来修饰类、方法、变量,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。
finally 则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-finally或者try-catch-finally来进行类似关闭JDBC连接、保证unlock锁等动作。
finalize 是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK 9开始被标记为deprecated。
11、序列化的方式和区别
Serializable来实现序列化操作,Android中有Parcelable来实现序列化操作
Serializable的性能更强,Parcelable在序列化过程使用了反射会产生大量的临时变量,从而导致系通频繁的GC,所以性能方面会稍差一点
Parcelable是以Ibinder作为信息载体的,所以内存开销较小
Parcelable因为不同版本存在差异,所以做数据持久化的时候还是采用Serializable
Parcelable 实现较为麻烦
12、kotlin的理解
空对象安全
lambda表达式
13、闭包和匿名内部类的区别
闭包就是能读取其他函数内部变量的函数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。