你说对了一些,变量都没有初始化,但是编译器是有优化的,a和b被初始化为nil(a、b不是一个脏指针),c、d被初始化成0,虽然没有运行时的问题,但这不是一种好的编程习惯。那后面的就好理解了,a、b是空对象,向空对象发消息(print)返回的也是空(nil == 0),简单值也是当0处理。补充一点,你用GCC4、LLVM GCC、LLVM 这三个编译器分别编译可能遇到不同的结果,并不是每个编译器都会帮你做默认初始化的。

解决方案 »

  1. 感谢斑竹大大!现在我知道了编译器对此进行了优化,a和b被初始化为nil,那nil即空和0有什么区别吗,比如和后面int c,d被初始化为0比起来,还有简单值也是当0处理怎么理解?[a numerator];结果为0,[a print];没有结果或说没有反应,是因为print方法返回空(就不输出结果了),而numerator方法当0处理(就输出0的结果)?这样吗
      

  2. 我只是有意测试一下 在实际编写时不会这样去做 就是想知道 同样是[a numerator];就可以得到值为0,而[a print];却得不到任何值,print内部其实就是用numerator方法写的
      

  3. [a print]当然会什么都得不到,因为没有进入print方法中(a 对象是空的)。
    a对象既然不存在(初始化为nil),那么其内存地址就是0x00000000,所以说nil == 0;简单类型都是初始为0的,int = 0, long = 0, float  = 0.0f,bool = false 等等
      

类似问题 »