1.JDK 和 JRE 有什么区别?
JDK:java开发工具包
JRE:java运行时环境
JVM:java虚拟机
JDK包括JRE,JRE包括JVM,如果你要编写java程序,需要JDK,如果只需要运行java程序,只安装JRE就可以了。
JVM是java实现跨平台的最核心部分,所有的java程序都会被javac编译成为.class字节码文件,比照jre/lib目录下的类库在虚拟机上运行后通过返回机器对应的机器码呈现给用户。
2.== 和 equals 的区别是什么?
对于“==”,如果作用于基本数据类型,则直接比较值,如果作用于引用数据类型,则比较对象的内存地址。
对于“equals”,equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否为同一个对象。
如果没有重写equals,那么跟“==”相同,比较对象的内存地址。
重写后的equals比较的是对象的内容。
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,首先这个问题是在重写后的hashCode和equals方法的前提下,hashCode()方法底层是生成hash算法进行比较,效率比equals高,不同的对象的hash值可能会冲突,所以一般比较对象会先用hashCode进行比较,如果二者的hashCode不相等,则两个对象肯定不相等,如果二者的hashCode相等,再用equals进行比较,equals相等则对象相等,阿里有一个规范:重写equals方法必须重写hashCode方法。
4.final 在 java 中有什么作用?
final作用的对象不同会产生不同的效果。
修饰类,则该类不能被继承;
修饰方法,则该方法不能被重写;
修饰变量,则该变量不能被修改。
5.java 中的 Math.round(-1.5) 等于多少?
-1
math类中有三个取整有关的方法:ceil floor round
ceil:天花板,表示向上取整,例:Math.ceil(1.5)的结果为2,Math.ceil(-1.5)的结果为-1
floor:地板,表示向下取整,例:Math.floor(1.5)的结果为1,Math.floor(-1.5)的结果为-2
round:圆,表示四舍五入,底层算法为数字+0.5再向下取整,例如:Math.round(1.5)的结果为2,Math.round(-1.5)的结果为-1