昨天同事在項目中,對一個數組長度進行判斷的時候,出現了一個詭異的情況。
在判讀數組長度是否大於6時,使用數組長度減去6進行判斷,代碼如下:
- //初始化數據
-
- NSMutableArray *listArray = [[NSMutableArray alloc] initWithObjects:@"cell1",@"test2", nil];
-
- if ([listArray count] - 6 > 0) {
- NSLog(@"listArray數組的長度大於6");//即使數組長度為2也會打印出信息
- }
翻看數組NSArray的API後發現,數組的count屬性類型是NSUInteger,對應C語言中的無符號整型,當一個整型類型的數(int 類型)和無符號整型(unsigned int類型)的數相做加減運算時,運算的結果是一個無符號整型(unsigned int)類型,所以,在上面的示例中, [listArray count] - 6 > 0 的值是大於0的,所以在進行無符號整型(unsiged int)和整型(int)的運算的時候,需要特別注意,上面代碼的正確寫法應該如下:
- //初始化數據
-
- NSMutableArray *listArray = [[NSMutableArray alloc] initWithObjects:@"cell1",@"test2", nil];
- int judgeCase = [listArray count] - 6 ;//將unsiged類型的值強制轉化成int類型
- if (judgeCase > 0) {
- NSLog(@"listArray數組的長度大於6");//即使數組長度為2也會打印出信息
- }