为什么NSInteger必须转为NSNumber才能被用作字典的Key

1.从 NSInteger的定义上看:

typedef long NSInteger;
所以它是一个自定义类型,本质上就是一种基本数据类型,不是类。

2.这个地方在Java的Map要是作为key,都是要装箱的,int要转化为Interger.

3.在oc字典里也同理

有一个NSNumber是个类,从字面上看,它属于char、int、long、double 中的哪一种呢? 其实,NSNumber 可以隶属其中的任意一种类型。 这就是“类”的强大 —— 抽象,而且内嵌多种方法(method)。


4.如同Java中的int类型,在Java中定义一个map,key的设置必须是个类,所以

NSNumber 所拥有的类方法,装箱如下:

+ (NSNumber*)numberWithChar: (char)value;

+ (NSNumber*)numberWithInt: (int)value;

+ (NSNumber*)numberWithFloat: (float)value;

+ (NSNumber*)numberWithBool: (BOOL) value;

拆箱如下:

- (char)charValue;

- (int)intValue;

- (float)floatValue;

- (BOOL)boolValue;

- (NSString*)stringValue;

字面量语法,最简单的: NSNumber *number = @(2);

你可能感兴趣的:(为什么NSInteger必须转为NSNumber才能被用作字典的Key)