JAVA面试必备:基础数据类型与String特性解析

版权申诉
5星 · 超过95%的资源 1 下载量 93 浏览量 更新于2024-07-21 收藏 304KB PDF 举报
"这份资料是2020年面试题的JAVA基础知识汇总,涵盖了JAVA的数据类型、String类的特性以及String、StringBuffer、StringBuilder的区别。" 在JAVA编程语言中,了解基本数据类型及其占用的内存空间是至关重要的。JAVA提供了八种基本数据类型,包括四类整型、两种浮点型、一个字符型和一个布尔型: 1. **byte**: 占用1字节,数值范围是-128到127。 2. **short**: 占用2字节,数值范围是-32768到32767。 3. **int**: 占用4字节,数值范围是-2^31到2^31-1。 4. **long**: 占用8字节,数值范围是-2^63到2^63-1。 5. **float**: 占用4字节,数值范围大约是3.4e-45到1.4e38,赋值时需以f或F结尾。 6. **double**: 占用8字节,数值范围大约是4.9e-324到1.8e308,赋值时可加d或D,也可不加。 7. **boolean**: 只有两个可能的值:true和false,不涉及数值大小。 8. **char**: 占用2字节,用于存储Unicode编码,使用单引号定义。 关于**String类**,它是JAVA中的核心类,代表不可变的字符序列。由于`String`类被声明为`final`,所以它不能被继承。其源代码中,`String`实现了`Serializable`接口、`Comparable<String>`接口以及`CharSequence`接口,确保了字符串的序列化、比较和作为字符序列的功能。 **String、StringBuffer和StringBuilder**三者之间的主要区别在于可变性和线程安全性: - **String**是不可变的,意味着一旦创建,就不能改变其内容。它的内部数组`value[]`由`final`修饰,这确保了其安全,但同时也限制了效率,每次修改都会创建新的对象。 - **StringBuilder**和**StringBuffer**都是可变的,允许在原有对象基础上进行修改,而不必每次都创建新对象。在多线程环境下,`StringBuffer`是线程安全的,因为它对关键操作如`append()`使用了`synchronized`关键字,而`StringBuilder`则没有这个保证,适合于单线程环境以提高性能。 创建`String`对象时,有两种常见的方法: - 方式一:`String str1 = "123";` 这种方式会从常量池中查找或创建对应的字符串对象。 - 方式二:`String str2 = new String("123");` 这种方式会先在堆中创建一个新的字符串对象,即使常量池中已经存在相同的字符串。 理解这些基础概念对于JAVA开发者来说至关重要,特别是在面试和实际项目开发中,它们经常会被问到并应用到。