Java面试精华:JDK与JRE差异、equals与==对比、Java常量与数据类型详解

0 下载量 181 浏览量 更新于2024-06-28 收藏 117KB DOC 举报
本文档主要针对2020年的Java面试专题,详细解答了一些常见的面试问题,涵盖了Java开发和基础概念的理解。以下是一些关键知识点: 1. **JDK与JRE的区别**: JDK (Java Development Kit) 是Java开发工具包,它不仅提供了Java的运行环境JRE,还包括编译器Javac,用于将Java源代码编译成字节码。开发者需要JDK来开发、构建和调试Java应用程序。相比之下,JRE (Java Runtime Environment) 是运行Java程序所需的最低环境,包括Java虚拟机(JVM)和核心类库。安装JRE就足以运行已编译好的Java程序。 2. **==与equals的区别**: 在Java中,`==`运算符用于比较对象的引用,对于基本数据类型(如int、float等),它进行值比较;而对于引用类型(如对象),它比较的是对象的内存地址。而`equals()`方法在默认情况下是对象间的引用比较,但在一些类(如`String`和`Integer`)中,经过重写后实现了基于值的比较,确保相等的值返回true。 3. **hashCode()与equals()的关系**: 虽然两个对象的`hashCode()`相同时,它们可能有不同的`equals()`结果。因为在Java中,一个类可以设计其`hashCode()`方法,使得具有相同值但不同实例的对象具有相同的哈希码。反之,`equals()`方法需要确保如果两个对象的哈希码相同,它们的值也必须相等。 4. **final关键字的用法**: `final`关键字有三种用途:修饰类表示最终类,不允许子类继承;修饰方法表示不可重写,通常在抽象方法或静态方法中使用;修饰变量表示常量,一旦赋值,其值不可改变。 5. **Math.round()函数示例**: `Math.round(-1.5)`的结果是-1,这是因为`round()`函数会进行四舍五入,对于负数,它会舍去小数部分。 6. **关于数据类型**: Java的基础数据类型有8种:`byte`、`boolean`、`char`、`short`、`int`、`float`、`long`和`double`。`String`虽然看起来像一个简单的文本,但实际上它是对象类型,存储在内存中的字符序列。 7. **字符串处理类**: Java中主要有三个操作字符串的类:`String`、`StringBuffer`和`StringBuilder`。`String`是不可变的,每次操作会创建新的对象,而`StringBuffer`和`StringBuilder`是可变的,`StringBuffer`线程安全但效率较低,因为它频繁加锁;`StringBuilder`非线程安全但性能更好。 8. **内存分配差异**: `str="i"` 创建了一个字符串常量池中的引用,而 `String str=new String("i")` 则会创建一个新的字符串对象。两者在内存分配上有明显区别,前者更高效,后者更灵活但占用更多内存。 这些知识点是理解Java编程基础和面试中常见问题的关键,熟练掌握它们有助于在Java开发和求职面试中取得成功。