在 AS3 中,相同的字符串值是否总是等于相同的字符串引用?

Does the same String value always amount to the same String reference in AS3?

在AS3中,两个具有相同值String是否总是具有完全相同的引用,无一例外?特别是,我想知道连接字符串和从 Web 服务返回的字符串之类的东西是否可以创建具有相同精确值的重复实例。

例如:

class Example
{
    const MY_STRING:String = "Example";
    .
    .
    .
    private function myWebMethodResultHandler(pResult:ResultEvent):void
    {
        var myWebMethodString:String = pResult.result as String;
        trace(myWebMethodString === MY_STRING); // returns true;
    }
    .
    .
    .
    private function someOtherFunction():void
    {
        var str1:String = "Ex";
        var str2:String = "ample";
        var concatenatedString:String = str1 + str2;
        trace(concatenatedString === MY_STRING); // returns true;
    }
}

是否绝对保证在所有情况下,包括上述情况,AS3 中具有相同值的两个 String 也是具有相同确切引用的相同确切实例,或者是否存在任何情况Strings 可以单独存储并作为重复实例,占用两倍的内存(并导致 String 内部比较比仅比较两个 32 位引用更复杂)?

这是不正确的,AS3 中的基本类型不是通过严格相等的引用进行比较,而是通过值进行比较。引用严格相等是为复杂对象保留的。具有相同值的 2 个字符串永远不会有相同的引用(这不是 Python)。

现在 AS3 并不是唯一一种在严格比较时以不同方式对待基元的语言,因为严格相等意味着对复杂对象的引用相同,所以通常假设基元也是如此,但事实并非如此。是的,构造相同的字符串 5 次将导致构建 5 个不同的引用和 5 个不同的对象,但这在 AS3 中像在其他语言中一样得到有效处理。如前所述,像 Python 这样的语言会缓存原语,在这种情况下,2 个相等的字符串或数字可能指向相同的引用,但该域中的 Python 更像是例外而不是规则。

所以要恢复一点,AS3 中的严格相等可用于检查复杂对象之间的严格相等,但当涉及到基元时,它没有特殊意义,因为它只比较与简单相等相同的值。