基本数据类型:
int、 char、 float和double都不是类,
不具有方法、 成员变量和属性, 以及面向对象的特征。
为了实现“一切都是对象” 的承诺,
因此在Foundation框架中使用NSNumber类来封装这些数字类型。
这样数字就具有了面向对象的基本特征了。
也就是说:如果需要存储基本数据类型(包括char数据类型),可以使用NSNumber类,
它会依据这些数据的类型创建对象。
对于每种基本数据类型,类方法都能为它创建一个NSNumber对象,并设置为指定的值。
NSNumber类构造函数
采用 + numberWithInt: 等“+ number” 开头的类级构造方法,或者使用方法initWithInt,或者使用@表达式, 可以从基本数据类型构建NSNumber对象。
而使用 –intValue方法可以从NSNumber对象获得基本数据类型。
这些方法以numberWith开头,紧接着数据的类型,如:numberWithLong:
这些方法以numberWith开头,紧接着数据的类型,如:numberWithLong:
- NSNumber *intNumber= [NSNumber numberWithInteger:80]; //NSNumber *intNumber= [[NSNumber alloc] initWithNumber:80];
- NSNumber *floatNumber = [NSNumber numberWithFloat: //NSNumber *intNumber=@100
- 80.00];
- int myint = [intNumber intValue];
- float myfloat = [floatNumber floatValue];
char score = 'A'; NSArray *student = @[ @{@"name": @"Jim", @"age":@20, @"height":@175.5, @"weight":@60.5, @"score":@(score)}, @{@"name": @"John", @"age":@22, @"height":@179.8, @"weight":@67.2, @"score":@(score)}, @{@"name": @"Jack", @"age":@21, @"height":@180.0, @"weight":@70, @"score":@(score)} ]; // 可以看出将int,double类型在直接转换就是在前面加@,如果是变量就用()将变量括起来
注意,方法numberWithInt:和numberWithInteger:使用有些差别,遵循以下一些规则:
1)如果使用numberWithInt:方法创建一个整型数,需要使用intValue获取它的值,使用%i作为格式化字符串显示它的值。
2)如果使用numberWithInteger:方法创建一个整型数,需要使用integerValue获取它的值,也可以转换成long显示或使用stringWithFormat:将它格式化为字符串。使用%li作为格式化字符串。
比较两个NSNumber对象大小
可以转化成为基本数据类型比较, 当然可以使用 NSNumber的方法比较,
可以转化成为基本数据类型比较, 当然可以使用 NSNumber的方法比较,
这就是对象的优势了, 与比较相关方法有:
isEqualToNumber: 和compare: 。
isEqualToNumber: 和compare: 。
isEqualToNumber: 只是比较是否相对, compare: 可以比较大小。
NSOrderedAscending是枚举类型NSComparisonResult的其中成员, 代表第一个数小于第二个数,
- if ([intNumber isEqualToNumber: floatNumber] == YES) {
- NSLog(@"相等");
- } else {
- NSLog(@"不相等");
- }
- if ([intNumber compare: myNumber] ==
- NSOrderedAscending) {
- NSLog(@"第一个数小于第二个数");
- }
此外还有NSOrderedSame成员代表第一个数等于第二个数,
NSOrderedDescending成员代表第一个数大于第二个数。