首先,我先看看String类的源码实现 (转载
http://java.chinaitlab.com/UploadFiles_8734/200807/20080701105737913.jpg)
1、String类是final的,不可被继承。public final class String。
2,String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];
3、String类对象有个特殊的创建的方式,就是直接指定比如String x = "abc","abc"就表示一个字符串对象。而x是"abc"对象的地址,也叫做"abc"对象的引用。
4.String对象可以通过“+”串联。串联后会生成新的字符串。也可以通过concat()来串联
5、创建字符串的方式很多,归纳起来有三类:
其一,使用new关键字创建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串联生成新的字符串。比如String s3 = "ab" + "c";
6、Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。
二、String对象的创建
原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个s在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
另外,String的intern()方法是一个本地方法,定义为public native String intern(); intern()方法的价值在于让开发者能将注意力集中到String池上。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
最后,有几点问题请大家注意:String a; 与String a=null在作为类变量时候是等价的,在局部变量则不同。null表示一个空引用,String a=null意思是在栈中声明了a,但是这个a没有指向任何地址。此时我们注意到String a 在栈中声明了a,但是也没有指向任何地址,但是java的语法检查如果在局部变量中,String a;是不能直接使用的,String a=null中的这个a可以直接使用。
- 大小: 14.2 KB
分享到:
相关推荐
在深入理解String时,我们需要掌握以下几个关键知识点: 1. 引用变量与对象: 在Java中,变量分为基本类型变量和引用类型变量。引用变量(如String s)实际上是一个指向对象的句柄或引用,而非对象本身。当我们...
深入了解Java中的String类是至关重要的,因为String在Java编程中占据着极其重要的位置。下面将对给定的信息进行深入分析: ### 1. String 类是 final 的,不可被继承 在Java中,`String` 类被声明为 `final` 类型...
本篇文章将详细解释Java中的String池概念及其重要性,并通过一个示例代码深入理解String池的工作机制。 #### String池的基本概念 Java中的String池是一个特殊的数据结构,它存储了所有被程序引用的字符串字面量...
本教程"深入学习C++_String2.1版"旨在帮助开发者更全面、深入地理解`std::string`类及其在实际编程中的应用。以下是对这个主题的详细探讨: 一、`std::string`类的基本概念 `std::string`是一个容器类,用于存储可...
string类的常用方法在Java编程中,String类无疑是我们最常用到的一个类。无论是用户输入、文件读取还是网络传输,字符串操作无处不在。...本篇博文将带你深入了解String类的核心方法,并通过实例演示它们的用法。
在C#中,String类是编程中不可或缺的一部分,它的特性对于理解...综上所述,深入理解C#中的String类不仅包括其类型特性,还包括不变性、驻留池、参数传递以及性能优化等方面的细节,这对于编写高质量的C#代码非常重要。
### C++ `string` 类深入详解 #### 一、C++ 的 `string` 使用 ##### 1.1 C++ `string` 简介 在 C++ 中,`string` 类是一个非常重要的类,它提供了丰富的接口来处理字符串。与 C 语言中的字符数组不同,`string` ...
深入理解Java中`String`的处理机制对于避免陷阱至关重要。`String`的不可变性和`String Pool`的存在是为了提升性能和安全性,但同时也要求开发者在创建和使用`String`对象时采取正确的方法,以避免不必要的性能损耗...
在Java编程语言中,`String#intern()` 是一个非常重要的方法,它涉及到字符串常量池的概念,对于理解和优化代码性能有着关键的作用。本篇将深入探讨`String#intern()` 的工作原理、使用场景以及在实际开发中的应用...
通过深入学习`std::string`,你可以更好地理解和利用C++中的字符串处理能力,提高代码质量,减少因字符操作引起的错误。无论是编写简单的命令行工具还是复杂的系统应用,掌握`string`的用法都是必不可少的。
《深入学习C++ string》2.1版详细解读 C++中的`std::string`是C++标准库中一个非常重要的容器,它用于存储和操作文本...通过深入理解这些知识点,可以更好地在C++项目中利用`std::string`进行高效、安全的文本处理。
在深入探讨`String`类之前,先要理解C#与SQL Server数据库技术的结合,因为这两个领域的知识是现代软件开发中的基础。`String`类在处理SQL查询时经常扮演关键角色,例如构建SQL语句、存储和检索数据库中的文本数据。...
标题与描述中提到的知识点是关于C#编程语言中`String`与`string`的区别,以及`string`类型的...通过以上分析,我们可以深入了解C#中`String`与`string`的区别及其使用细节,这对于提高代码质量和程序性能具有重要意义。
对于想要深入了解string类的使用者,可以通过以下途径加深理解和实践: - 访问东北林业大学ACM内部培训资料,了解string的学习目标。 - 参考博客《寒假培训——string》,获取更多string类的例题和题解。 - 练习使用...
首先,让我们深入了解String类型。在Redis中,String是最基本的数据类型,可以存储字符串、整数或浮点数。例如,你可以设置一个键为"user_age",值为"25"的键值对,表示用户的年龄。此外,Redis提供了丰富的命令操作...
"深入理解 Java String#intern() 内存模型" Java String#intern() 内存模型是 Java 语言中一个重要的概念,.string#intern() 方法是 Java 字符串常量池中一个重要的组件。字符串常量池是一个固定大小的 HashMap,桶...
深入理解`String#intern()`方法对于优化内存使用和理解Java的内存模型至关重要。`intern()`方法是一个非常特殊的函数,它将字符串常量池(String Constant Pool)的概念引入到我们的讨论中。 字符串常量池是Java...
### 深入学习C++ String #### 一、C++的string的使用 ##### 1.1 C++ string简介 在C++中,`std::string`是用于处理文本数据的标准库的一部分,它提供了丰富的功能来管理和操作字符串。与传统的C风格字符串不同,`...
总的来说,理解String类和它的intern()方法对于优化内存使用和提高程序性能至关重要。通过合理使用这些机制,开发者可以避免不必要的对象创建,从而减少内存开销。在面试或实际开发中,掌握这些知识能够帮助我们编写...
这里我们将深入探讨`String`对象在编译期和执行期的创建方式以及它们之间的差异。 首先,我们来了解一下编译期的`String`对象创建,这通常与字符串字面量有关。在Java源代码中,当使用双引号定义一个字符串,例如`...