"Java面试题集锦,涵盖了基础到高级的各类问题,旨在帮助准备面试者全面复习Java知识。"
1. JDK与JRE的区别
JDK(Java Development Kit)是Java开发工具包,包含了JRE(Java Runtime Environment)以及编译器、调试器和其他开发工具。JRE是Java运行环境,只包含运行Java程序所需的库和执行环境,不包含开发工具。
2. `==`与`equals()`的区别
`==`用于比较基本类型变量的值是否相等,或者对象引用是否指向同一内存地址。而`equals()`方法用于比较对象的内容是否相等。默认情况下,对象的`equals()`方法与`==`相同,但可重写以实现自定义的比较逻辑。
3. `hashCode()`与`equals()`的关系
当`equals()`方法返回`true`时,`hashCode()`方法也应该返回相同的值,以保持哈希表(如HashMap)中的正确性。如果两个对象相等(根据`equals()`),它们的哈希码也应该相等。反之则不成立,因为不同的对象可能有相同的哈希码。
4. `final`关键字的作用
`final`在Java中用于声明不可变的对象、变量或方法。一旦被声明为`final`,就不能再改变其值或重写。这常用于确保数据安全、常量定义以及单例模式的实现。
5. `Math.round(-1.5)`的结果
`Math.round()`方法将浮点数四舍五入为最接近的整数。对于`-1.5`,它会被四舍五入为`-1`。
6. String与包装类的转换
Java提供了自动装箱和拆箱机制,可以方便地在原始类型和对应的包装类之间转换。例如,`String`可以转换为`Integer`、`Short`、`Long`、`Character`、`Float`、`Double`、`Byte`等包装类,反之亦然。
7. String常用方法
`String`类提供了多种操作字符串的方法,包括获取长度(`length()`)、访问字符(`charAt()`)、查找子串(`indexOf()`)、判断是否为空(`isEmpty()`)、替换字符(`replace()`)、分割字符串(`split()`)、截取子串(`substring()`)、转换大小写(`toUpperCase()`, `toLowerCase()`)和去除空白(`trim()`)等。
8. 字符串`str="i"; String str=new String(i);`的区别
前者创建一个共享的字符串常量,后者创建一个新的字符串对象,即使内容相同,它们在内存中也是两个独立的实体。
9. 字符串反转
字符串的反转可以通过多种方式实现,例如直接调用`String`的`reverse()`方法,或者使用`StringBuilder`或`StringBuffer`的`reverse()`方法后转换为`String`。
10. `String`对象的常用方法
`equals()`、`length()`、`charAt()`、`substring()`、`codePointAt()`、`indexOf()`是`String`对象的常用方法,用于比较、获取字符、子串、编码位置和查找子串。
11. 多线程同步
多线程同步是为了避免多个线程同时访问共享资源导致的数据不一致。Java提供了`synchronized`关键字、`wait()`、`notify()`、`notifyAll()`等方法来实现线程同步。
12. 实现单例模式
单例模式确保一个类只有一个实例。有饿汉式(类加载时初始化)、懒汉式(首次调用时初始化)、双重检查锁定(线程安全的懒汉式)等多种实现方式。
13. 使用`final`修饰类、变量和方法
`final`关键字可以用于修饰类(使类不能被继承)、变量(使变量不可变)和方法(使方法不能被重写)。
14. 构造器与抽象方法
构造器用于初始化对象,抽象方法没有实现体,必须在子类中重写。接口中的方法默认为抽象的,不可以用`final`修饰,因为接口方法不能有具体实现。
15. Java I/O系统
Java I/O系统提供了对输入输出流的处理,包括字符流(`Reader`/`Writer`)和字节流(`InputStream`/`OutputStream`),以及缓冲流、转换流、对象流等,支持文件、网络、内存等多种数据源的读写操作。
以上只是部分Java面试题目的解析,实际面试中还会涉及更多Java语言特性、集合框架、异常处理、多线程、设计模式、网络编程、数据库操作等相关知识。通过学习和练习这些题目,可以提高Java程序员的技能和面试成功率。