1.JDK和JRE有什么区别?
JRE: Java Runtime Environment (java运行时环境)
JDK:Java Development Kit(java开发工具包)
简单的说就是如果你只是想要运行一个java程序,JRE就够了。但如果你要编写java程序并运行程序,那么你就需要JDK,并且JDK中囊括了JRE。
JRE:
JRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的Java类库的class文件,都在lib目录下,并且都打包成了jar。
JDK:
Jdk是Java Development Kit的缩写,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
2.==和equals()的区别是什么?
基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。但是当==遇到引用数据类型时,就会出问题,它只会比较他们在内存中存放的地址,而不是选取地址里面的值来进行比较。用C/C++的术语来说,操作符 == 比较的是指针的值,方法equals比较的是被指针指向的值。
而String、Integer、Date中的equals()方法再被重写后,比较的则是引用地址里的值。
3.两个对象的hashCode()相同,则equals()也一定为true,对吗?
如果两个对象hashCode()相等,它们并不一定相等。 因为在散列表中,hashCode()相等,即两个键值对的哈希值相等。然而哈希值相等,并不一定能得出键值对相等。补充说一句:“两个不同的键值对,哈希值相等”,这就是哈希冲突。
反过来其实也不一定相同。正常情况下,因为equals()方法比较的就是对象在内存中的值,如果值相同,那么Hashcode值也应该相同。但是如果不重写hashcode方法,就会出现不相等的情况。换句话说:重写equals方法时请必须重写hashcode,以保证equals方法相等时两个对象hashcode返回相同的值。如果你不按照规范来,就不一定相同了。
4.final在java中有什么作用?
1.修饰变量
修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。
final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。
2、final修饰类中的方法
作用:可以被继承,但继承后不能被重写。
3、final修饰类
作用:类不可以被继承。
5.java中Math.round(-1.5)等于多少?
Math.round(1.5)的返回值是2,Math.round(-1.5)的返回值是-1。四舍五入的原理是在参数上加0.5然后做向下取整。