经常在不同编程语言听到这种说法,要理解其中的含义需要了解编译器的机制。
- C# string类型字符串是不可变的,但可以看到string变量可以用新字符串赋值,这合理吗?根本在于,string变量是一个引用/地址或者指针,它是可变的,不可变的是可能用于赋值的字符串字面量。
不可变的字符串
- Java/C#/Kotlin 等语言的常规字符串都是不可变,如果要用可变字符串,需要用特定的字符串类。
易用错的API
- C# 字符串ToUpper()、ToLower()、Trim*函数看起来是会改变字符串的值,实际上,对于string类型它是不可变的,调用这些函数并不会改变string字符串本身,而是返回了新的修改过的字符串,切记!