zoukankan      html  css  js  c++  java
  • 不常见程序写法和容易误解的概念


    一,不常见写法:
            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;
    }
      







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

  • 相关阅读:
    springboot 默认日志
    redis 实现分布式锁
    java 线程池等待所有线程执行完毕
    java 线程池
    springcould 五大组件详解
    java 导出excel
    java 下载excel模板
    java 8 通过某个字段去重
    leetcode算法题-461.汉明距离
    java Barcode4j生成条形码并添加至pdf打印
  • 原文地址:https://www.cnblogs.com/xianyun/p/437673.html
Copyright © 2011-2022 走看看