`

不是说字符串不可变吗

阅读更多

from csdn: http://topic.csdn.net/u/20110213/20/ea6b5231-7397-41fb-a34d-349d4f29144d.html?seed=532705613&r=71600365#r_71600365

 

问:不是说字符串是不可变的吗,string s="abc";s="123"不就是变了吗?

 

答:* 不变指的是String对象 ,也就是说String对象 的内容不会变

String str = "Hello";
str = "Goodbye";

* 在上面的例子中,第二次赋值是把"Goodbye"给了String变量,实际发生的是一个新的字符串"Goodbye"被创建,而且这个新字符串的对象引用(注意引用是新的了,也就是更新了指向 )被储存在了str变量中

之所以看上去变了只是 错把String变量(str)当成了String对象

分享到:
评论

相关推荐

    JAVA精华 String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。

    这是因为String对象在Java中是不可变的。这意味着每次对String对象进行操作(如拼接或替换字符),都会生成一个新的String对象。例如,`String x="a"+4+"c"` 在编译时等同于 `String x=new StringBuffer().append("a...

    java 字符串 正则表达式 详细实例代码

    - Java中的字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。这由`final`关键字确保,提高了线程安全性。 - 创建字符串的方式有两种:通过字面量(如`String str = "Hello"`)或通过构造函数...

    字符串反转 C# .NET

    在C#中,字符串是不可变的,这意味着一旦创建了一个字符串对象,就不能改变它的内容。因此,当我们说“反转字符串”时,实际上是创建一个新的字符串,其字符顺序与原字符串相反。 1. **使用内置方法:** C# .NET...

    Java中字符串.pdf

    字符串在内存中被视为不可变对象,即一旦创建,其内容就不能更改。Java标准库中的`java.lang`包提供了两个主要的字符串类:`String`和`StringBuffer`,它们各自有着不同的用途。 1. **字符串的概念**: - 字符串是...

    VB 字符串高速链接例子

    在VB中,字符串是不可变的,这意味着每次对字符串进行修改,都会创建一个新的字符串对象。这在连续拼接字符串时会引发大量的内存分配和垃圾回收,导致性能下降。而`StringBuilder`则是一个可变的对象,允许在现有...

    C#WinForm中对文档的导入字符串的各种截取

    在C#中,字符串是不可变的,这意味着一旦创建,就不能更改其内容。因此,当我们说“截取字符串”时,实际上是在创建一个新的字符串,而不是改变原始字符串。 1. **字符串的基本操作** 在C#中,我们可以使用`string...

    Java第6章 字符串 含源代码

    Java中的字符串是不可变的,这意味着一旦创建,就不能更改。所有改变字符串的方法,如`concat()`, `substring()`, `replace()`等,都会返回新的字符串对象,而不是修改原始字符串。 3. **字符串操作** - **连接**...

    deline一个ES6字符串标记能够删除多行字符串中多余的换行

    总的来说,deline是一个实用的JavaScript库,对于那些需要处理多行字符串并保持其整洁性的项目来说,它是一个不可或缺的工具。通过了解其工作原理和用法,开发者可以更好地优化代码,提高开发效率,同时保持代码质量...

    ios-字符串中每4个长度加个空格.zip

    - 在Swift中,字符串是不可变的,意味着一旦创建,就不能直接修改。因此,我们需要创建一个新的字符串来实现这种分段插入空格的功能,而不是直接在原始字符串上进行操作。 2. **字符数组**: - 为了插入空格,...

    c字符串,string对象,字符串字面值的区别详解

    总结来说,C字符串是原始的字符数组,需要谨慎处理内存和边界,字符串字面值是不可变的,而`std::string`对象提供了丰富的接口和安全保障,更适用于现代C++编程。在选择使用哪种字符串类型时,应考虑其特性和应用...

    JAVA 从一个字符串中删除指定字符

    首先,我们要了解Java中的字符串是不可变的,这意味着一旦创建了一个字符串对象,就不能更改其内容。因此,当我们需要删除字符串中的特定字符时,通常需要创建一个新的字符串来存储结果。下面我们将介绍两种主要的...

    字符串解析

    - 这两个类提供了字符串可变的能力,它们主要用于在需要频繁修改字符串内容的情况下,以提高性能。因为它们内部维护了一个字符数组,可以修改数组的内容,而无需每次都创建新的对象。 - 当涉及到多线程环境时,...

    字符串压缩程序.rar

    总的来说,“字符串压缩程序.rar”是一个学习字符串压缩算法和数据压缩原理的宝贵资源。它不仅提供了实践经验,也鼓励了对高效数据处理方法的探索。对于那些想要提升自己在IT领域技能,特别是数据压缩方面的人来说,...

    C语言中将数字转换为字符串的方法

    C语言中将数字转换为字符串的功能,虽然没有直接的内建函数,但可以通过标准库函数如itoa(), sprintf()以及针对浮点数的fcvt()或gcvt()来实现。下面详细介绍这些方法及其相关知识点。 1. itoa()函数 itoa()是一个非...

    字符串缓冲区

    它的主要目标是避免频繁地创建和销毁字符串对象,因为在许多编程语言中,字符串是不可变的,每次修改都会生成一个新的字符串对象,这可能导致大量的内存开销。通过使用缓冲区,我们可以重复利用已有的内存空间,减少...

    java 字符串指定长度

    在Java中,字符串是不可变对象,意味着一旦创建,其内容就不能更改。然而,我们可以通过多种方式来控制或操作字符串的长度。 1. **截取字符串**: - `substring(int beginIndex, int endIndex)` 方法可以用于截取...

    数组字符串定义布局设置i.zip

    例如,在Java和C#中,字符串一旦创建就是不可变的,这意味着你不能改变字符串中的某个字符;而在Python中,字符串是不可变的,但可以通过切片和连接操作创建新的字符串。 字符串操作是编程中常见的任务,这些操作...

    C#语法字符串与数组的研究

    在C#中,字符串是表示字符序列的数据类型,具有特殊的地位,因为它是不可变的。这意味着一旦创建了一个字符串实例,就不能更改它的内容。字符串在C#中被视为引用类型,继承自`object`,并实现了多个接口,如`...

    jsp页面中EL表达式被当成字符串处理不显示值问题的解决方法

    当EL表达式被错误地当作字符串处理而不是被解析时,会导致其原本要展示的数据无法正确显示。这个问题在使用Java EE 5及以上版本时比较常见。 要解决这个问题,首先需要理解EL表达式的解析与web.xml配置文件中指定的...

    Java字符串使用总结.docx

    1. **内存优化**: 由于`String`对象是不可变的,多个变量可以共享同一个字符串对象,从而节省内存空间。 2. **线程安全**: `String`对象的不可变性意味着一旦创建,它的状态就不会发生变化,这使得`String`对象天生...

Global site tag (gtag.js) - Google Analytics