1. JRE 和 JDK 有什么区别?
JRE是Java Runtime Environment的缩写,即是java运行环境,包含jvm、java基础类库,它是使用java语言编写的程序运行需要的软件环境。
JDK是Java Development Kit的缩写,顾名思义是java开发工具包,包含JRE,同时还含有编译器javac,还包含其它java调试和分析工具,它是给程序员开发所使用的。
2. == 和 equals 的区别?
1. ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
2. ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
3. ==指引用是否相同, equals()指的是值是否相同
(想详细弄清此问题,可以看下这篇文章的讲解——优美的讲解equals和==的区别。)
3.final、finally和finalize的区别?
1.final(注意:不可与abstract一同使用,因为抽象类必须通过子类继承实现才能体现意义)
•final修饰的类不可被继承,为最终类
•final修饰的属性变量不可被更改,只能赋值一次
•final修饰的方法不可被覆盖,为最终方法
2. finally(笔试题类型:finally相对return的执行顺序问题)
finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。
3. finalize(知道即可,笔试面试很少问及)
finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运)。
4.String、StringBuffer、StringBuilder的区别?
String和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
5.接口和抽象类的区别
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量。
(3)抽象类中可以包含静态方法,接口中不能包含静态方法。
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承。
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法。
网友评论