用反射修改字符串
Modify strings with reflection
我正在阅读 question/answers,它基本上显示了 Java 和字符串中的一个有趣行为,我想到了两个问题:
- Objective-C/Swift
String
的行为是否相同?我的意思是,如果我有两个存储相同文字 "someString"
的变量,它们在内部会引用一个 "someString"
对象吗?我在文档中没有找到任何关于它的信息。
- 如果我上一个问题的答案是肯定的,那么是否可以像 Java 中那样更改相同的字符串文字?
- 由于编译单元的原因,并非所有
NSString
文字 (@"string literal"
) 都共享相同的存储空间。
NSString
文字在程序代码中不能更改,它们被编译成只读段。
NSString
变量,即在运行时创建的变量,仅通过赋值共享。
NSString
实例是不可变的,创建后无法更改。
NSMutableString
个实例可以修改,所有指向此类实例的变量都指向相同的更改。
Swift 略有不同,正如@Grimxn 指出的那样,Swift String
不是 class 并且不变性由声明语法确定:let
或 var
.
我正在阅读
- Objective-C/Swift
String
的行为是否相同?我的意思是,如果我有两个存储相同文字"someString"
的变量,它们在内部会引用一个"someString"
对象吗?我在文档中没有找到任何关于它的信息。 - 如果我上一个问题的答案是肯定的,那么是否可以像 Java 中那样更改相同的字符串文字?
- 由于编译单元的原因,并非所有
NSString
文字 (@"string literal"
) 都共享相同的存储空间。 NSString
文字在程序代码中不能更改,它们被编译成只读段。NSString
变量,即在运行时创建的变量,仅通过赋值共享。NSString
实例是不可变的,创建后无法更改。NSMutableString
个实例可以修改,所有指向此类实例的变量都指向相同的更改。
Swift 略有不同,正如@Grimxn 指出的那样,Swift String
不是 class 并且不变性由声明语法确定:let
或 var
.