这一章节我们来讨论一下不变的字符串。
为什么说是不变?
我们先看String 的构造器
public String() {
this.offset = 0;
this.count = 0;
this.value = new char[0];
}
其中里面的value,我们再看一下:
/** The value is used for character storage. */
private final char value[];
value的标识符是final,因此,字符串在编译器里面是不可原地修改。
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
String a = "a";
String b = a.toUpperCase();
System.out.println(a == b);
}
}
输出:
false
在转换的过程中,其实是把“a”这个字符串对象复制一份,然后再进行转换。
我们可以点进去toUpperCase方法里面,里面需要注意的有两句:
System.arraycopy(value, offset, result, 0, firstUpper);
和
return new String(0, count+resultOffset, result);
第一句是把传入的值复制一份,然后第二句在最后new一个新的字符串出来。
然后,大家可以在String 这个类的源代码里面搜索一下return new String,你会发现,你常用的那些方法,基本都是返回一个新的字符串。
总结:我们这里只是简单的结束一下字符串的可不修改的特性,其实它里面还包括很多内容,但是暂时不做详细展开,大家知道有这个特性即可。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
这个表可以帮助我们避免不必要的比较,当主字符串中的字符与子串不匹配时,我们可以根据部分匹配表快速跳过已比较过的部分,而不是从头开始。 1. KMP算法的next function: next function是一个数组,它的索引是...
在IT行业中,字符串匹配是计算机科学的一个重要领域,特别是在编程语言如Swift和Objective-C(OC)中。这里我们将深入探讨标题和描述中提到的“KMP匹配”和“AC多模字符串匹配”,以及它们在Swift开发中的应用。 ...
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...
4. **资源文件**:如XML布局文件(activity布局、菜单、图标等)、图片、字符串资源等。 5. **测试代码**:可能包含JUnit或Espresso测试,用于验证客户端功能的正确性。 6. **README.md**:通常会提供项目介绍、安装...
在这个解决方案中,`left`和`right`指针分别从头和尾开始,通过交换它们指向的字符,实现了字符串的反转。由于这个过程只需要遍历一次数组,所以时间复杂度是O(n),其中n是字符串的长度。 在面试中,这道题目不仅能...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
java源码字符串缓冲区 这是 Java String 、 StringBuilder和StringBuffer方法/API 的完整指南。 本指南的源代码示例在我们的本地开发环境中进行了良好的测试,您可以将这些示例用作无错误。 您可以在 上了解更多信息...
4. **字符串的常用函数**:C语言中的`<string.h>`库提供了许多字符串处理函数,如`strlen()`计算字符串长度,`strcpy()`和`strncpy()`复制字符串,`strcmp()`比较字符串,`strtok()`分割字符串等。 在`线性表上机....
在C语言中,字符串处理是编程中的重要组成部分。C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`<string.h>`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了...
回环字符串,也称为环状字符串或循环字符串,是指可以通过将字符串的一部分移动到字符串的开头,使得整个字符串形成一个环状结构的字符串。在给定的代码中,我们有两个主要的函数`isok()`和两个辅助函数`addhead()`...
例如,对于模式串"ababc",部分匹配表为[0, 0, 1, 0, 2],表示在匹配失败时,可以将模式串右移对应的步数,而不必从头开始。 3. KMP算法步骤: (1)初始化:设置模式串的起始位置i=0,主串的起始位置j=0。 (2)...
VS2010支持C99标准,虽然C99引入了更现代的字符串处理函数,如`strncpy()`和`strncat()`,但作者仍然选择不使用它们,这可能意味着他们想要从头构建自己的解决方案,以便更好地理解字符串操作的底层原理。...
4. **数组翻转**:将字符串转换为字符数组,然后使用数组的翻转功能,如C++中的`std::reverse`,Java中的`Collections.reverse`。 5. **StringBuilder/Buffer**:在Java中,可以使用`StringBuilder`或`StringBuffer...
在IT领域,字符串处理是计算机科学中的一个基本概念,尤其...通过理解和掌握这类问题的解决方案,不仅能够提升在C++编程中的技巧,还能加深对字符串处理和动态规划算法的认识,这对于IT从业者来说是非常有价值的技能。
字符串问题在计算科学中占有重要的地位,涉及字符处理的各种算法和数据结构。常见的字符串处理包括查找、替换、连接、插入和删除等基本操作,而更深入的算法如最长公共子序列(LCS)和最长公共子串(LIS)则是研究字符串...
Java字符串工具类之字符串智能截取 本文主要介绍了Java常用字符串工具类中的字符串智能截取,提供了四种常用的方法来截取字符串,这些方法可以实现正向和反向截取字符串。下面是对该工具类的详细说明: 1. ...
在传统的字符串匹配算法中,如朴素算法,每次比较一个字符,如果发现不匹配则需要从头开始检查下一个位置,效率较低。而Rabin-Karp算法通过预计算子串的哈希值,再利用哈希碰撞的概率特性,大大减少了比较次数。 在...
【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...
这种方法是将字符串转换为字符数组,然后使用两个指针,一个从头开始,一个从尾部开始,交换它们指向的字符,直到两个指针相遇。这种方法简单直观,但需要额外的存储空间来创建字符数组。代码如下(以Java为例): ...