1.JDK 和 JRE 有什么区别?
①JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
②JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。
2.== 和 equals 的区别是什么?
== 对于基本类型来说是值比较,对于引用类型来说是比较的是地址值;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的 hashCode()相同,equals()不一定 true。
hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
4.final 在 java 中有什么作用?
①final 修饰的类叫最终类,该类不能被继承。
②final 修饰的方法不能被重写。
③final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
5.java 中的 Math.round(-1.5) 等于多少?
解读:round()是Math类中的一个四舍五入的方法,就是round()方法在实现四舍五入的时候实际上是不论正负的,它会先将这个数加上0.5然后在像下取整。
-1.5+0.5=-1.0,然后-1.0向下取整结果为-1,最后的结果就是-1
6.String 属于基础的数据类型吗?
String不是基本的数据类型,是final修饰的java类
java中的基本类型一共有8个:byte、boolean、char、short、int、float、long、double
7.java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder
简单来说就是↓↓
String:不可变字符串;
StringBuffer:可变字符串、效率低、线程安全;
StringBuilder:可变字符序列、效率高、线程不安全;
8.String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。
9.抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。可以半抽/全普/全抽
10.接口和抽象类有哪些区别?
①抽象类是一个被abstract修饰的类
接口可以理解成一个特殊的抽象类,但接口不是类,定义的关键字是interface
②抽象类中的方法不做限制(全普/全抽/半普半抽)
接口中的方法全部都是抽象方法,而且可以简写,默认拼接public abstract
③抽象类中有构造方法,为了子类创建对象时调用super()
接口中没有构造方法,接口实现类如果没有明确指定父类,super()调用的是Object();
④接口与抽象类均不可创建对象
⑤抽象类是重构的结果,接口是设计的结果
11.抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。
12.java 中 IO 流分为几种?
①字节输出流(OutputStream)
②字节输入流(InputStream)
③字符输出流(Writer)
④字符输入流(Reader)