您的位置:首页 > 移动开发 > Objective-C

objective-c学习笔记第二章《objective-c中类型,表达式与java中的区别》

2011-06-29 17:02 489 查看
书接上文。

这次来研究下oc中变量类型和表达式中与java不同的地方。

总体来说oc中还是秉承类c语言中的输入输出还有数据类型定义的方式,同时加入了一些新的元素。

java中类型大概总体上分为两类,一种叫做简单类型,一种叫做复杂类型。

简单类型:

实数:double,float

整数:byte,short,long,int

字符:char

布尔型:boolean

int类型 占4个字节,范围记不得了,初始值是0。

short类型 占2个字节,范围还是不知道,但是貌似是int类型的一半,初始值还是0。

long类型 占8个字节,范围是int的一倍。

byte类型 就这个能记住,一个字节,-128到127。

double是双精度类型,比较靠谱一般我都喜欢用他,反正现在电脑都挺牛逼的,多申请电内存空间页不会死机- -。

(但其实在ios的开发中,内存的空间还是十分宝贵得,所以在确定精度的问题确实需要慎重的。比如在oc中有一个int64的类型,顾名思义,就是说是一个整形变量,但是长度可以达到64位。这个就比较牛逼了。只不过,相应占用的内存会非常大,如果开发一个病毒软件,倒是可以考虑多用用这个类型)(2012.4.11)

float是单精度类型,长度是double的一半。

boolean类型只有两个值 一个是true 一个false 初始值是false。

以上是简单类型。那么什么是复杂类型呢?

其实复杂类型就是一个类,通过定义一些对象的特性,然后称为一种类型。

oc中移除了java中很多的类型。

一共只有四个简单类型。int,float,double和char。

其中int类型对应java中的int类型

float类型对应java中的float类型

double对应java中的double

char类型对应java中的char

那么oc中如何解决高精度的问题呢?

oc中加入了一个限定词的概念,一共五个限定词,long,long long,short,unsigned和signed。

通过以上五个限定词和上述的四种基本类型搭配以达到增加数据类型长度的目的。

long:我认为可以片面在基本类型之前加一个long就代表增加了一倍的位宽。

short:与long相反,减少一倍。估计char不能使用。

unsigned:正如字面意思,就是木有符号,那就是只能用来储存正数。

signed:signed限定词可明确告诉编译起特定变量是有符号的。主要用在char声明前面。

oc中有一个特殊的数据类型。id。

这个类型可以声明所有的数据类型。听起来比较牛逼。在没有看后面教科书的前提下,觉得应该思考一些问题。

1,用什么方法分辨具体变量到底属于那种数据类型。

2,假如出现数据类型错误,是抛出异常,还是有别的处理方法。

以上问题留到日后解决

(现在看来id这个类型确实是神器。为什么这样说,因为在日常的ios开发中,经常会碰到很多莫名其妙的元件名称,比如label,比如button,在某个方法中可能传入的是label,也有可能传入的是button,那么到底这个时候需要用什么变量类型这个就十分纠结了,所以干脆都用id来统一表示。在碰到具体情况的时候通过判断语句就能很轻松的决定需要将传入过来的id类型转换成相应得什么类型。这个非常方便) (2012.4.11)

算数表达式上,oc与java没有任何区别。至少我是这么理解的。

关于类型转换。

类型转换一直都是让人头疼的一部分。至少在j2ee方面是这样的,经常会碰到从jsp页面往servlet穿参数的时候要进行String类型到int类型的转换。

java转换比较麻烦,分为自动转换和强制转换两种。

所谓自动转换,就是在将小的容器中的物品放到大的容器中的物品的时候不需要使用任何命令,jvm会自动处理这些操作。

比如将一个定义成 float f=1000.123 和 float f1=1.123 执行 double d=f+f1 的时候就可以直接获得答案。

另外一种叫做强制转换,就是将大的容器中的物品放到小的容器中,需要进行强制转换,比如,int n=(int)23/1.23232。但是,这种操作经常会引起溢出或者是精度下降。

还有一种就是调用静态方法进行转换,比如上述提到的将String 类型 转换成 int类型,会调用Integer.parseInt 这个方法,其实也属于强制转换的类型,或者将int类型转化成String 类型,可以使用String.valueOf 函数。

但是,貌似oc中没有自动转换这个概念。所有的类型转换都是使用强制类型转换。比如 (int) i = 3.1323213123; 在这个例子中就直接把小数部分去掉,然后i=3。

(上面这一句还是有所偏差得,因为在大部分情况下,ios开发的条件都比较明显,或者说是比较苛刻的,大部分得数据类型都会以可以预料的范围得出,所以转换类型的概念基本都运用到id到相应类型的操作上)(2012.4.11)

在结束这一章的总结之前,需要重新说明一点的是,关于 int 类型 表示 十进制 八进制 还有 十六进制的一些方法。如果这个数开头是0,那么就是八进制,如果是0x就是十六进制。

char
%c
short int %hi %hx %ho
unsigned short int %hu %hx %ho
int %i %x %o
unsigned int %u %x %o
long int %li %lx %lo
unsigned long int %lu %lx %lo
long long int %lli %llx &llo
unsigned long long int %llu %llx %llo
float %f %e %g %a
double %f %e %g %a
long double %Lf $Le %Lg
id %p
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐