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

Dart: how many string objects are allocated when using the * operator in an assignment?

在下面的代码中,我希望总共分配 3 个字符串:

String str  = "abc";
String str2 = str*2; //"abcabc"

这个例子中的分配是少了还是多了?我知道字符串在 Dart 中是不可变的,但我不确定这些操作是如何在幕后工作的,因为 属性.

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

"abc" 创建一个字符串对象。
String str = "abc"; 使 str 引用创建的字符串对象 ("abc")。
str*2; 创建第二个 String 对象 "abcabc",str2 在第二个语句之后引用。

所有两个String对象。

使用优化编译器很难确定。如果您想了解更多信息,可以使用 irhydra.

查看生成的本机代码

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

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