昨天同事在项目中,对一个数组长度进行判断的时候,出现了一个诡异的情况。
在判读数组长度是否大于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也会打印出信息 }