Flex中的Object和Dictionary

其实Dictionary和Object很相像,用途也差不多是一样的,只是Object的key只能是字符串,就算赋值的时候不是,也会被转换为字符串的,Dictionary的key可以是任何类型。(Object的key都是被转换为字符串(String)类型理解的,当有多个Object对象,作为某个Object实例的key时,如果key对象的toString结果是一样的,那么得到的结果也是一样的),下面一个例子应该能多多少少说明这个问题:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="app(event)">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.events.FlexEvent;
   
   private function app(event:FlexEvent):void{
    var key1:Object = new Object(); 
    var key2:Object = new Object(); 
    
    var obj:Object = new Object(); 
    obj[key1] = "a"; 
    obj[key2] = "b"; 
    
    var dict: Dictionary = new Dictionary(); 
    dict[key1] = "a"; 
    dict[key2] = "b"; 
    
    //Result 
    Alert.show(obj[key1]);         //b 
    Alert.show(obj[key2]);         //b 
    
    Alert.show(dict[key1]);         //a 
    Alert.show(dict[key2]);         //b 
   }
  ]]>
 </fx:Script>
</s:Application>

注:Object无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的Object对象作为键,都会被转换成字符串"[object Object]"作为键,因此而指向了同一个数据。

参考:
http://michellewang.iteye.com/blog/1004276
http://hi.baidu.com/shin_tgdh/item/b7ad4d25087f840d77272c4c