闲云

一张白纸,总想写上点什么...
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

不常见程序写法和容易误解的概念

Posted on 2006-06-28 13:10  闲云  阅读(445)  评论(2编辑  收藏  举报


一,不常见写法:
        1, if(...){}
                else switch(...){}   --觉得还比较简洁

二,误解的概念
        1, SomeType a = new SomeType();
                if(SomeType==nulll){}  这句话永远是对的
        2, SomeType a = new SomeType();
                SomeType b;
                b=a;
                a=null;
                b=???   b是什么呢?估计很多人以为是Null吧? 都是引用,会改变原来的值
                            其实,b还是存在的,因为a只不过断了地址!

               有人比喻,传值和传址就好比邮递员送信,一个是送到手中,一个是收到领取的包裹单。
                所以,上面的例子就好比,有两个包裹单同时送给了a和b,a把包裹单掉了,这明显是
                不影响b的
        3,  String a="XXXX";
             a.Replace("XXXX","");
              Print(a);   // 哦?a还是老样子!String对象是不可变的,一旦创建就不会发生更改。String上看
             似更改的操作,其实是返回一个新的String对象。
 
             当然,你可能会反驳我
              a=a.Replace("XXXX","");
              Print(a);  // 终于更改了吧!嘿嘿,上面的不可改变理论破灭了!
                             是吗?
              注意:String是引用类型,这样是改变了引用,原来的a已经在等待垃圾回收了!
              小心:值类型也生了这样的脾气,比如:DataTime.Now.AddMonth(1) -->不改变 
       4, 注意引用

Class SomeClass1
{
    pubic 
int I;
}


SomeClass1 class1
=new SomeClass1();
SomeClass1[] classArr1
=new SomeClass1[10];
for(int i=0;i<10;i++)
{
     classArr1[i]
=class1;
     class1.I
=i;
}
  
// 结果SomeClass1的集合里面I全部为10
// 原因是都是引用了class1,只修改了一份

// 正确的是
for(int i=0;i<10;i++)
{
     SomeClass1 class1
=new SomeClass1();
     classArr1[i]
=class1;
     class1.I
=i;
}
  







                                             ===== 以后慢慢加 =====