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")
目录
相关文章
|
28天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
65 2
|
17天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
45 14
|
27天前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
21天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
27 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
53 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
105 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
112 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
63 5