1、JDK和JRE是什么?有什么区别?
JDK:Java development Kit简称,即Java开发工具包,提供了Java的开发环境和运行环境
JRE:Java Runtime Enviroment简称,即Java运行环境。
具体来说:JDK包含了JRE,同时还包含了Java源码的编译器Javac,还包含了很多Java程序调试和分析的工具。
简单来说:如果只是要运行一个Java程序,只需要安装JRE,但是如果要编写Java程序,需要安装JDK。
2、== 和equals的区别?
== 解读
① 基本类型:比较的值是否相同
② 引用类型:比较的引用是否相同
equals 解读
equals方法本质上是跟==一样的,但是String和Integer类对其做了封装。
简单来说就是,当String使用equals方法进行比较的时候,比较的是值,当Integer使用equals方法比较的时候,比较的是引用。
3、两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对。
4、final在java中的作用?
修饰类的时候,类不可以被继承。
修饰变量的时候,变量必须初始化,并且值不可以修改。
修饰方法的时候,方法不可以被重写。
5、Java操作字符串的类有哪些?他们都有什么区别?
操作字符串的类有:String、StringBuilder、StringBuffer。
是否可变 | 是否安全 | 是否高效 | |
---|---|---|---|
String | 不可变,每次操作完以后,都会生成新的String对象,执行新的地址 | 不可变类,安全 | 性能较差 |
StringBuilder | 可变 | 不安全 | 效率最高 |
StringBuffer | 可变 | 使用了synchronized,安全 | 仅次于StringBuilder |
6、String s = "i"和String s = new String(“i”)是否一样?
不一样。
因为前者将变量s分到了常量池,后者被分配到了堆内存中。
7、普通类、抽象类和接口的区别?
普通类:不可以有抽象方法,可以被final关键字修饰。
抽象类:使用abstract修饰类,可以有抽象方法,也可以没有抽象方法,不能被final关键字修饰,因为抽象类就是为了被继承。子类继承父类(抽象类)后,继承所有抽象方法,可以不为抽象类。不能被实例化。
接口:使用interface关键字修饰,所有方法均为抽象方法。不能被实例化。