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

String Dart:在赋值中使用*运算符时分配了多少字符串对象?,string,memory,dart,String,Memory,Dart,在以下代码中,我希望总共进行3次字符串分配: String str=“abc”; 字符串str2=str*2//“abcabc” 1当创建str 另一种方法是在创建str副本以与其自身连接时 第三个用于保存str与自身的连接(str2) 本例中的分配是否更少或更多?我知道字符串在Dart中是不可变的,但由于这个属性,我不确定这些操作在后台是如何工作的。我不知道Dart VM的内部工作原理,但我想说: “abc”创建一个字符串对象。 String str=“abc”使str引用创建的字符串对

在以下代码中,我希望总共进行3次字符串分配:

String str=“abc”;
字符串str2=str*2//“abcabc”
  • 1当创建
    str
  • 另一种方法是在创建str副本以与其自身连接时
  • 第三个用于保存str与自身的连接(
    str2

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

我不知道Dart VM的内部工作原理,但我想说:

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


总之是两个字符串对象。

我不知道Dart虚拟机的内部工作原理,但我想说:

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


总之是两个字符串对象。

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

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


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

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

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


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

正确。如果查看
“str”*4
,VM只为结果分配一个额外的字符串。dart2js编译的代码实际上会创建中间字符串,但JavaScript引擎针对这种情况进行了优化。正确。如果查看
“str”*4
,VM只为结果分配一个额外的字符串。dart2js编译代码实际上创建了中间字符串,但JavaScript引擎针对这种情况进行了优化。