Dart:在赋值中使用*运算符时分配了多少个字符串对象?

时间:2015-02-21 17:16:55

标签: string memory dart

在下面的代码中,我预计会有3个字符串分配:

String str  = "abc";
String str2 = str*2; //"abcabc"
    创建str
  • 1
  • 另一个创建str的副本以与自身连接时
  • 第三个用于保存str与自身(str2
  • 的串联

此示例中是否有更少或更多的分配?我知道Dart中的字符串是不可变的,但由于这个属性,我不确定这些操作是如何工作的。

2 个答案:

答案 0 :(得分:3)

我不了解Dart VM的内部工作原理,但我会说:

"abc"创建一个String对象 String str = "abc";使str引用一个创建的String对象("abc"str*2;创建第二个String对象" abcabc" str2在第二个陈述之后引用的。

所有两个String对象。

答案 1 :(得分:2)

通过优化编译器,很难确定。如果您想了解更多信息,可以使用irhydra查看生成的本机代码。

一般来说,一个好方法是编写代码尽可能可读,然后使用工具查找代码中的瓶颈,并优化它们。

例如observatory可以显示哪些对象占用的内存最多,哪些方法运行最多。