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

来源:互联网 发布:vue.js html 编辑:程序博客网 时间:2024/06/05 15:24
昨天同事在项目中,对一个数组长度进行判断的时候,出现了一个诡异的情况。


在判读数组长度是否大于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也会打印出信息      }

原创粉丝点击