### Java经典面试题详解 #### 1. JDK与JRE的区别 - **JDK (Java Development Kit)**: JDK 是 Java 开发工具包的简称,它包含了编写 Java 应用程序所需的开发工具,如编译器(javac)、调试器(jdb)等,以及文档和其他资源。它是开发 Java 应用程序的基础,对于开发者来说必不可少。 - **JRE (Java Runtime Environment)**: JRE 是 Java 运行环境,包含了 JVM (Java Virtual Machine) 和 Java 核心类库。JRE 主要用于执行 Java 程序,是运行 Java 应用程序所必需的环境。如果你只需要运行 Java 程序,安装 JRE 就足够了。 - **关系**: JDK 包含了 JRE 的所有内容,并且增加了开发工具和文档等资源。这意味着,如果你安装了 JDK,就可以同时拥有开发和运行 Java 程序的能力;而仅安装 JRE 只能运行 Java 程序。 #### 2. == 和 equals 的区别 - **==**: 在 Java 中,`==` 用于比较两个基本类型的数据或两个引用是否相等。 - 对于基本类型,`==` 比较的是它们的值是否相同。 - 对于引用类型,`==` 比较的是它们指向的对象是否是同一个,即内存地址是否相同。 - **equals**: - `equals` 方法主要用于比较两个对象的内容是否相等。 - 默认情况下,`equals` 方法的行为类似于 `==`,即比较对象的引用是否相同。 - 通常情况下,我们会在类中重写 `equals` 方法来比较对象的具体内容,而不是它们的引用。 #### 3. final 关键字的作用 - **修饰引用**: - 如果 `final` 修饰的是基本数据类型,那么该变量的值一旦被初始化后就不能改变。 - 如果 `final` 修饰的是引用类型,如对象,那么该引用指向的对象可以改变其状态,但引用本身不能指向另一个对象。 - **修饰方法**: - 当方法被声明为 `final` 时,意味着该方法不能被子类覆盖(重写)。 - **修饰类**: - 当类被声明为 `final` 时,该类不能被继承。例如,Java 中的 `String` 类就是一个 `final` 类,因此不能被继承。 #### 4. Math.round(-1.5) 的结果 - `Math.round(-1.5)` 的结果是 `-1`。 - `Math.round` 方法通过加上 0.5 后向下取整的方式来实现四舍五入。 - 对于负数而言,加上 0.5 后向下取整,实际上就是对小数部分进行处理后取最接近的整数,当数字正好位于两个整数中间时,`Math.round` 会向远离零的方向取整。 #### 5. String 是否属于基础的数据类型 - `String` 不属于基础数据类型。Java 中的基础数据类型包括 byte、short、int、long、float、double、char 和 boolean 八种。 - `String` 是一个类,用于表示文本字符串。它可以存储一系列的字符,但不是基本数据类型。 #### 6. String str="i" 与 String str=new String("i") 的区别 - `String str="i"`: 使用这种方式创建的 `String` 对象会被放置在常量池中,如果常量池中已经存在相同的字符串,则不会创建新的对象,而是直接返回已存在的引用。 - `String str=new String("i")`: 这种方式创建的 `String` 对象会被放置在堆内存中,即使字符串完全相同也会创建新的对象。 #### 7. 如何将字符串反转 - 可以使用 `StringBuilder` 或 `StringBuffer` 类的 `reverse()` 方法来反转字符串。 ```java String original = "Hello"; StringBuilder sb = new StringBuilder(original); String reversed = sb.reverse().toString(); System.out.println(reversed); // 输出 olleH ``` #### 8. String 类的常用方法 - **获取功能**: - `length()`: 获取字符串的长度。 - `charAt(int index)`: 返回指定索引位置的字符。 - `indexOf(int ch)`: 返回指定字符首次出现的位置。 - `substring(int start, int end)`: 返回一个从指定位置开始到结束位置结束的子字符串。 - **判断功能**: - `equals(Object obj)`: 比较字符串的内容是否相同。 - `contains(String str)`: 判断字符串中是否包含指定子字符串。 - `startsWith(String str)`: 判断字符串是否以指定字符串开头。 - `endsWith(String str)`: 判断字符串是否以指定字符串结尾。 - `isEmpty()`: 判断字符串是否为空串。 - **转换功能**: - `getBytes()`: 把字符串转换为字节数组。 - `toCharArray()`: 把字符串转换为字符数组。 - `String.valueOf(char[] chs)`: 把字符数组转换为字符串。 - `toLowerCase()`: 把字符串转换为全小写形式。 - `toUpperCase()`: 把字符串转换为全大写形式。 - `concat(String str)`: 拼接字符串。 - **其他功能**: - `replace(char oldChar, char newChar)`: 替换字符串中的某个字符。 - `trim()`: 去除字符串两端的空白字符。 - `split(String regex)`: 根据正则表达式分割字符串。 以上知识点涵盖了Java面试中常见的几个方面,帮助准备面试的开发者们更好地理解和掌握Java基础知识。
- 粉丝: 2334
- 资源: 388
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 牙科铣床三维建模图纸 STP格式 .zip
- 基于Spring Boot框架的优惠券卡包系统.zip
- SSS Shader Graph
- 基于Spring Boot框架的仿牛客网社区.zip
- 基于Spring Boot框架的仓库管理系统.zip
- OpenNJet实现了NGINX云原生功能增强、安全加固和代码重构,利用动态加载机制可以实现不同的产品形态,如Web服务器等等
- 基于正负序分离控制的三相离网逆变器,带不平衡阻性负载 图片为基于正序控制的和基于正负序分离控制的离网逆变器分别带载的波形
- 基于Spring Boot框架的乐优商城.zip
- 基于ros2的fast-lio2定位算法
- 基于Spring Boot框架的Hadoop集群管理系统.zip