JS 字符串的不可变

极客漫游说
• 阅读 703

字符串的不可变,指的是字符串值不可变,虽然看上去可以改变内容,但其实是地址变了,在内存中开辟了一个新的内存空间。

var str = 'abc';
str = 'hello';

当重新给 str 赋值的时候,常量 'abc' 不会被修改,依然在内存中。
给 str 赋值为 'hello' 的时候,会重新在内存中开辟空间,这个特点就是字符串的不可变。
由于字符串的不可变,在大量拼接字符串的时候会有效率问题。

var str = '';
for (var i = 0; i < 1000000; i++) {
    str += i;
}
// 这个结果需要花费大量的时间来显示,因为需要不断的开辟新的空间
console.log(str); 
点赞
收藏
评论区
推荐文章
阿里最新面试必备项之Java的String类,持续更新中!
最新腾讯面试必备项之Java的String类,持续更新中!1.1String的特性String类:代表字符串。Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。String是一个final类,代表不可变的字符序列。String字符串是常量,用双引号引起来表示。他们的值在创建之后不能更改。String对象的找字符内容是存储在一个
Wesley13 Wesley13
3年前
String、StringBuffer、StringBuilder的区别
String字符串常量StringBuffer字符串变量(线程安全)StringBuilder字符串变量(非线程安全) 简要的说,String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String
Wesley13 Wesley13
3年前
java之字符串缓冲区 StrgingBuffer StringBuilder
1.StringBuffer是一个长度或内容可变的容器,可以装很多的字符串,并且有方法可以对字符串进行操作。2.操作创建对象1StringBufferbuffernewStringBuffer("abc");2.1将指定的内容(基本数据类型)增加到字符串1buffer.append(1234).app
子非鱼 子非鱼
3年前
引用不可变和对象不可变
什么是不可变的对象呢?我们都知道String是不可变的,如果有涉及大量的字符串拼接我们最好不要用String,虽然我们在代码中可以这样写:javaStringstr"test";str"test1";这样写是没有错的,这是不是和我们所说的String类型时不可变的违背了呢?其实不然,我们这里看到str“改变”了值,其实不是不是真正改变了,而是改变
Easter79 Easter79
3年前
String Builder 源码分析
!(https://oscimg.oschina.net/oscnet/2af3de6213a842a08f7a8b1544c6ebf0.png)StringBuilder与StringBuffer区别StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。StringBuffer可变字符串,线程安全,但效率
Easter79 Easter79
3年前
String ,StringBuffer ,StringBuilder 三者的理解
1.String,StringBuffer,StringBuilder三者执行效率的问题StringBuilderStringBufferStringString是字符常量,是不可变的.如果拿String来操作字符串,一旦操作的字符串的值改变了,就会在内存中创建多一个空间来保存新的字符串,这样的话String的效率就比较低下了.
Wesley13 Wesley13
3年前
JAVA常用类_String
String:一、定义1.字符串,声明为final的,不可被继。2.实现了Serializable接口:表示字符串是支持序列化的。  实现了Comparable接口:表示String可以比较大小二、特性1.String的不可变性    1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
Easter79 Easter79
3年前
Swift
在oc中有NSMutableString和NSString两种类型的字符串,但在swift中分别在定义的时候使用let和var来代表是否可以操作。let和var也通用于其他类型。使用let修饰的为不可变,使用var修饰的可变。//使用var修饰可以动态的改变值varvarStr"nihao"
Wesley13 Wesley13
3年前
Java中的mutable和immutable对象实例讲解
1.mutable(可变)和immutable(不可变)类型的区别可变类型的对象:提供了可以改变其内部数据值的操作,其内部的值可以被重新更改。不可变数据类型:其内部的操作不会改变内部的值,一旦试图更改其内部值,将会构造一个新的对象而非对原来的值进行更改。2.mutable和immutable类型的优缺点 mutableimmutabl
Stella981 Stella981
3年前
Python 的可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
Python的内建标准类型有一种分类标准是分为可变类型与不可变类型:可变类型:列表、字典不可变类型:数字、字符串、元组因为变量保存的实际都是对象的引用,所以在给一个不可变类型(比如int)的变量a赋新值的时候,你实际上是在内存中新建了一个对象,并将a指向这个新的对象,然后将原对象的引用计数–1.比如下面的示例:
小万哥 小万哥
1年前
Kotlin 变量详解:声明、赋值与最佳实践指南
Kotlin变量简介Kotlin中使用var定义可变变量,val定义常量。类型可自动推断,如varname&quot;John&quot;(String)和valbirthyear1975(Int)。val一旦赋值不可变,var则可变。变量名遵循驼峰命名法,且不能为保留字。println()用于打印变量值。可使用连接字符串或执行数学运算。