Java基础面试题总结(上)

简介: Java有8种基本数据类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、boolean、char(2字节)。String类被`final`修饰,不可被继承。String为只读,内容不可改;StringBuffer和StringBuilder可修改内容,前者线程安全,后者非线程安全,故效率更高。

一、Java 中有几种基本数据类型?各占多少字节?

在 Java 中基本数据类型有 8 个,占用的字节分别是整型 byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节);浮点型 float(4个字节)、double(8个字节);布尔类型 boolean; 字符类型 char (2个字节)。

二、String 类能被继承吗?为什么?

String 类不能被继承。因为 String 类被 final 修饰。final 修饰变量变量就会变成常量;final 修饰方法方法就会不可重写;final 修饰类类就不能继承;

三、String、StringBuilder、StringBuffer 的区别?

String 是只读字符串,也就是说 String 引用的字符串内容是不能被改变的。

StringBuffer/StringBuilder 类表示字符串对象可以直接修改。

StringBuffer 是线程安全的效率慢。StringBuilder 是线程不安全的效率高。

四、在多线程情况下 SimpleDateFormat 是线程安全的吗?

在多线程情况下 DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的。如果不在线程安全的情况下使用,在解析或者格式化日期的时候,可能会会获得一个不正确的结果。最佳的时间的多线程的情况下使用的时间工具类是 joda-time

五、equals 和 == 区别

== 比较的是变量(栈)内equals== 在Java中的主要区别体现在以下几个方面:

1、本质区别

  • equals():是定义在java.lang.Object类中的一个方法,用于比较两个对象的内容是否相等。它是一个方法,因此可以通过重写(Override)来改变其默认行为。
  • ==:是一个操作符,用于比较两个对象或基本数据类型的值是否相等。对于对象,它比较的是两个对象在内存中的地址是否相同,即是否是同一个对象的引用;对于基本数据类型,它比较的是两个值是否相等。

2、比较内容

  • equals():默认情况下,equals()方法通过==来比较两个对象的引用是否相同(即是否是同一个对象)。但是,许多类(如StringInteger等)都重写了equals()方法,以提供基于内容而非引用的比较。
  • ==:对于对象,它总是比较引用;对于基本数据类型,它比较的是值。

3、灵活性

  • equals():由于equals()是一个方法,因此它可以通过重写来提供灵活的比较逻辑。例如,在自定义类中,可以根据类的属性来定义两个对象何时被视为相等。
  • ==:其比较逻辑是固定的,无法更改。

4、 性能

  • equals():由于可能需要执行复杂的比较逻辑(特别是在重写了equals()方法的类中),因此其性能可能低于==
  • ==:仅仅比较引用或值,因此其性能通常优于equals()

5、 使用场景

  • equals():当需要比较两个对象的内容是否相等时,应使用equals()方法。特别是当比较的是自定义对象或已经重写了equals()方法的类(如StringInteger等)的实例时。
  • ==:当需要比较两个对象是否是同一个对象(即它们的引用是否相同)时,应使用==操作符。此外,对于基本数据类型的比较,也应使用==

示例

String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1 == s2); // false,因为s1和s2虽然内容相同,但它们是两个不同的对象
System.out.println(s1.equals(s2)); // true,因为String类重写了equals()方法,以比较内容

Integer i1 = 123;
Integer i2 = 123;

System.out.println(i1 == i2); // true,对于Integer这样的包装类,在-128到127之间的值会被缓存,因此i1和i2实际上是同一个对象
System.out.println(i1.equals(i2)); // true,即使不考虑缓存,equals()方法也会比较值

在这个示例中,==用于比较String对象时返回false,因为s1s2虽然内容相同,但它们是两个不同的对象;而equals()方法返回true,因为String类重写了equals()方法以比较内容。对于Integer对象,由于Java对-128到127之间的值进行了缓存,因此i1i2实际上是同一个对象,所以==equals()都返回true。但即使不考虑缓存,equals()方法也会比较两个Integer对象的值是否相等。

六、final 有哪些用法?

  • 被 final 修饰的类不能被继承
  • 被 final 修饰的方法不能被重写
  • 被 final 修饰的变量不能被修改值
  • 被 final 修饰的方法 jvm会尝试内联 以提高运行效率
  • 被 final 修饰的常量,在编译阶段会存入常量池中

七、java 反射的作用原理

1、定义

反射机制是在运行时,对于任意一个类,都能知道这个类的所有属性和方法;对于任意个对象,都能调用它的任意一个方法。在 java 中只要给定类的名字,就可以通过反射机制来获得类的所有信息。

2、反射的实现方式

  • 使用类名的 .class 属性,例如 String.class 可以获取 String 类的 Class 对象。
  • 使用对象的 getClass() 方法,例如 "hello".getClass() 可以获取字符串对象的 Class 对象。
  • 使用 Class.forName() 方法,需要传入类的全限定名,例如 Class.forName("java.lang.String")
目录
相关文章
|
10月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
519 1
|
10月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
393 3
|
7月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
9月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
603 0
|
9月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
395 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
10月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
5496 50
|
7月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
10月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
271 5
|
10月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
498 5