在下面的代码中,我预计会有3个字符串分配:
String str = "abc";
String str2 = str*2; //"abcabc"
str
时str2
)此示例中是否有更少或更多的分配?我知道Dart中的字符串是不可变的,但由于这个属性,我不确定这些操作是如何工作的。
答案 0 :(得分:3)
我不了解Dart VM的内部工作原理,但我会说:
"abc"
创建一个String对象
String str = "abc";
使str
引用一个创建的String对象("abc"
)
str*2;
创建第二个String对象" abcabc" str2
在第二个陈述之后引用的。
所有两个String对象。
答案 1 :(得分:2)
通过优化编译器,很难确定。如果您想了解更多信息,可以使用irhydra查看生成的本机代码。
一般来说,一个好方法是编写代码尽可能可读,然后使用工具查找代码中的瓶颈,并优化它们。
例如observatory可以显示哪些对象占用的内存最多,哪些方法运行最多。