Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 为什么我必须将函数的结果存储在变量中?_Kotlin - Fatal编程技术网

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引用的第一个不可变字符串,生成一个新的不可变字符串,然后分配该字符串