Java面试精华:基础题与深入理解

需积分: 32 5 下载量 117 浏览量 更新于2024-07-15 收藏 23KB DOCX 举报
Java面试题涵盖了多个关键知识点,以下是对其中部分问题的详细解释: 1. **`==`、equals和hashCode的区别**: - `==`用于比较基本数据类型的值,如整数、浮点数等,判断它们是否相等。 - 对于引用类型(如类的对象),`==`比较的是对象的内存地址,判断两个对象是否是同一个实例。如`String`类的`==`实际就是比较内存地址,因为它重写了`equals`方法来提供内容上的比较。 - `hashCode`是`Object`类的方法,返回一个散列码,主要用于集合类(如`HashMap`、`HashSet`)中的快速查找。两个equals方法返回`true`的对象,其`hashCode`通常会相等,但反之不成立。 2. **`int`与`Integer`的区别**: - `int`是基础数据类型,表示整数,占用CPU栈内存,直接存储数值。 - `Integer`是`int`的封装类,为`Integer`对象提供了包装和自动装箱功能,适合处理需要自动转换的情况,且对象存储在堆内存中。 3. **`String`、`StringBuffer`、`StringBuilder`的区别**: - `String`是不可变的,更改其值会创建新的对象,导致性能下降。 - `StringBuffer`是线程安全的字符串缓冲区,适合多线程环境下频繁修改字符串。 - `StringBuilder`是非线程安全的,但效率稍高,适合单线程或低并发场景。 4. **内部类的作用**: - 内部类包括成员内部类(可以访问外部类的私有成员)、局部内部类(仅在定义它们的上下文中可见)、匿名内部类和静态内部类。内部类可以访问外部类的私有属性,有助于代码组织和复用。 5. **进程和线程的区别**: - 进程是操作系统分配CPU资源的基本单位,每个进程有自己的独立内存空间,互不影响。 - 线程是进程内的一个执行单元,共享进程的资源,但有自己的堆栈。一个进程可以包含多个线程,多线程能提高程序响应速度。 6. **`final`、`finally`和`finalize`的区别**: - `final`用于修饰类、变量和方法,类不可继承,变量值不可变,方法不可重写;成员变量的final意味着其必须初始化。 - `finally`语句块通常与`try-catch`一起使用,无论是否发生异常,都会被执行,用于清理资源或执行必要操作。 - `finalize`是对象的析构函数,当垃圾回收器认为对象不再被引用时,会调用该方法,但不是强制性的,子类可以重写它来实现资源释放。 7. **`Serializable`和`Parcelable`**: - `Serializable`是Java中用于序列化的接口,对象需实现它以便通过`ObjectOutputStream`和`ObjectInputStream`进行序列化和反序列化。 - `Parcelable`是Android平台中用于序列化的接口,适用于Android组件间的通信,性能通常优于`Serializable`,因为Android提供了更轻量级的序列化机制。