是因为某些函数会更改对象,而有些则不会,因此您必须将返回的值存储在变量中?我敢肯定,有更好的方法问这个问题,但是我希望这是有道理的。
示例案例:thisString
为什么不大写?当我在toUpperCase()
上调用thisString
函数时,输出会怎样?有这种行为的名字吗?
var thisString: String = "this string"
var thatString: String = "that string"
thisString.toUpperCase()
thatString = thatString.toUpperCase()
println(thisString)
println(thatString)
打印:
this string
THAT STRING
答案 0 :(得分:1)
按照惯例,如果函数以单词 to 或过去分词开头,则它总是返回一个新对象,并且不会使调用它的对象发生突变。但这并非完全正确。以动词开头的函数可能会或可能不会使对象发生变异,因此您必须检查文档才能确定。
一个可变对象可能仍然具有返回新对象的功能。您必须检查调用函数的文档。
对于返回新对象的函数,如果您不对返回的结果执行任何操作或将其存储在变量中,则它将丢失给垃圾收集器,并且您将永远无法检索它。
String是一个不可变的类,因此您在其上调用的任何函数都不会修改原始对象。不可变类通常不太容易出错,因为您不能意外地修改仍在其他地方使用的实例。
所有原语也是不可变的。如果一个类的所有属性都是只读的vals
,并且它们引用的所有类类型也是不可变的类,则该类是不可变的。
如果您想要String
的可变替代项,则可以根据需要使用StringBuilder
,StringBuffer
,CharArray
或MutableList<Char>
。它们都有各自的优缺点。
答案 1 :(得分:1)
为什么thisString不能大写?
因为the function的编码方式是这样(强调我的意思):
“返回此字符串的副本,该字符串使用默认语言环境的规则转换为大写。”
在thisString上调用toUpperCase()函数的输出会发生什么?
什么都没有。如果您未将其分配给变量(保存对它的引用),则会将其丢弃。
此行为有名称吗?
AFAIK,这只是“忽略返回值”。
希望有帮助。