Kotlin 为什么我必须将函数的结果存储在变量中?
是因为有些函数会更改对象,有些函数不会,所以必须将返回值存储在变量中?我相信有更好的方式来提问,但我希望这是有意义的 示例:为什么Kotlin 为什么我必须将函数的结果存储在变量中?,kotlin,Kotlin,是因为有些函数会更改对象,有些函数不会,所以必须将返回值存储在变量中?我相信有更好的方式来提问,但我希望这是有意义的 示例:为什么这个字符串不保持大写?当我调用thisString时,toUpperCase()函数的输出会发生什么变化?这种行为有名字吗 var thisString: String = "this string" var thatString: String = "that string" thisString.toUpperCase() thatString = thatSt
这个字符串不保持大写?当我调用thisString
时,toUpperCase()
函数的输出会发生什么变化?这种行为有名字吗
var thisString: String = "this string"
var thatString: String = "that string"
thisString.toUpperCase()
thatString = thatString.toUpperCase()
println(thisString)
println(thatString)
其中打印:
this string
THAT STRING
按照惯例,如果一个函数以单词to或过去分词开头,它总是返回一个新对象,并且不会改变它所调用的对象。但这并非完全正确。以动词开头的函数可能会也可能不会改变对象,因此您必须查看文档才能确定
可变对象可能仍然具有返回新对象的函数。您必须检查您调用的函数的文档
对于返回新对象的函数,如果不对返回的结果执行任何操作或将其存储在变量中,它将丢失给垃圾收集器,并且您永远无法检索它
String是一个不可变的类,因此对它调用的任何函数都不会修改原始对象。不可变类通常不太容易出错,因为您不能意外地修改仍在其他地方使用的实例
所有的原语也是不可变的。如果类的所有属性都是只读的vals
,并且它们引用的所有类类型也是不可变的类,则该类是不可变的
如果您想要字符串的可变替代品,可以根据需要使用StringBuilder
、StringBuffer
、CharArray
或MutableList
。它们都有不同的优点和缺点。按照惯例,如果函数以单词to或过去分词开头,它总是返回一个新对象,并且不会改变所调用的对象。但这并非完全正确。以动词开头的函数可能会也可能不会改变对象,因此您必须查看文档才能确定
可变对象可能仍然具有返回新对象的函数。您必须检查您调用的函数的文档
对于返回新对象的函数,如果不对返回的结果执行任何操作或将其存储在变量中,它将丢失给垃圾收集器,并且您永远无法检索它
String是一个不可变的类,因此对它调用的任何函数都不会修改原始对象。不可变类通常不太容易出错,因为您不能意外地修改仍在其他地方使用的实例
所有的原语也是不可变的。如果类的所有属性都是只读的vals
,并且它们引用的所有类类型也是不可变的类,则该类是不可变的
如果您想要字符串的可变替代品,可以根据需要使用StringBuilder
、StringBuffer
、CharArray
或MutableList
。他们都有不同的优点和缺点
为什么这个字符串不保持大写
因为这就是编码方式(我的重点):
“返回使用默认区域设置规则转换为大写的该字符串的副本。”
当我调用toUpperCase()函数时,它的输出会发生什么变化
没什么。如果不将其分配给变量(保存对它的引用),则会将其丢弃
这种行为有名字吗
var thisString: String = "this string"
var thatString: String = "that string"
thisString.toUpperCase()
thatString = thatString.toUpperCase()
println(thisString)
println(thatString)
好吧,这只是“忽略返回值”
希望有帮助
为什么这个字符串不保持大写
因为这就是编码方式(我的重点):
“返回使用默认区域设置规则转换为大写的该字符串的副本。”
当我调用toUpperCase()函数时,它的输出会发生什么变化
没什么。如果不将其分配给变量(保存对它的引用),则会将其丢弃
这种行为有名字吗
var thisString: String = "this string"
var thatString: String = "that string"
thisString.toUpperCase()
thatString = thatString.toUpperCase()
println(thisString)
println(thatString)
好吧,这只是“忽略返回值”
希望有帮助。Kotlin中的字符串是不可变的。这正是他们决定执行itOk的方式,因此如果数据类型及其存储的变量是可变的,那么这样的函数通常会更改变量的值。对吗?变量不是字符串,它是对字符串的引用foo=“hello”
表示foo引用不可变字符串“hello”foo=“world”
而foo现在引用一个不同的不可变字符串“world”。Foo被修改为引用其他内容。字符串本身没有被修改thatString=thatString.toUpperCase()
获取thatString引用的第一个不可变字符串,生成一个新的不可变字符串,然后将该字符串的引用分配给该新的不可变字符串。谢谢,这非常有用。thisString.toUpperCase()
返回了此字符串及其在内存中的某个位置,但由于我没有将其存储在变量中,所以没有对其进行引用,这也是真的吗?Kotlin中的字符串是不可变的。这正是他们决定执行itOk的方式,因此如果数据类型及其存储的变量是可变的,那么这样的函数通常会更改变量的值。对吗?变量不是字符串,它是对字符串的引用foo=“hello”
表示foo引用不可变字符串“hello”foo=“world”
而foo现在引用一个不同的不可变字符串“world”。Foo被修改为引用其他内容。字符串本身没有被修改thatString=thatString.toUpperCase()
获取thatString引用的第一个不可变字符串,生成一个新的不可变字符串,然后分配该字符串