数组长度判断时出现的诡异问题总结

2015-01-25 23:56:10 · 作者: · 浏览: 6

在判读数组长度是否大于6时,使用数组长度减去6进行判断,代码如下:

[cpp]?

//初始化数据?
?
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)的运算的时候,需要特别注意,上面代码的正确写法应该如下:

[html]?
//初始化数据?
?????????
??????? NSMutableArray *listArray = [[NSMutableArray alloc] initWithObjects:@"cell1",@"test2", nil];?
[html] view plaincopy
int judgeCase = [listArray count] - 6 ;//将unsiged类型的值强制转化成int类型?
[html] view plaincopy
if (judgeCase > 0) {?
??? NSLog(@"listArray数组的长度大于6");//即使数组长度为2也会打印出信息?
}?

作者:yhawaii

?