此代码应将 false 打印到控制台,但会打印 true
NSMutableArray *data = [[NSMutableArray alloc]init];
UILabel *label = [[UILabel alloc] init];
label.tag = 7;
if(label.tag <= (data.count - 1)) {
NSLog(@"true");
} else {
NSLog(@"false");
}
任何人都可以解释这个吗?
答案 0 :(得分:3)
data.count
为0
,但它是无符号整数(NSUInteger
)。
(data.count - 1)
在这种情况下0 - 1
不等于-1
,因为整数是无符号的。它将是最大整数(4294967295
)。我们称之为整数下溢。
您可以轻松修复
label.tag + 1 <= data.count
使用无符号整数,您总是要小心减法。 另一种解决方法是使用强制转换为有符号整数:
label.tag <= ((NSInteger) data.count) - 1