深拷

7人阅读 评论(0) 收藏 举报
分类:

       最近项目中用到的深拷贝用法记录如下:

数组复制

public static void 数组复制()
{
    string[] arr = new string[] { "北京", "天津", "上海" };

    string[] brr = arr;
    bool b1 = object.ReferenceEquals(arr, brr);//true,验证了是同一个对象
    brr[0] = "新北京";                          //此时,arr也一同修改

    // Clone方法
    string[] crr = arr.Clone() as string[];    //浅表复制,会创建一个新对象,但引用是相同的.
    bool b2 = object.ReferenceEquals(arr, crr);//不是同一个对象.
    crr[1] = "新天津";                         //引用内存地址发生改变
   
    //CopyTo/Copy方法
    string[] drr = new string[arr.Length];
    arr.CopyTo(drr, 0);                  
    Array.Copy(arr, drr, arr.Length);     
}

List集合

        public static void ListDemo1()
        {
            bool IsSame;
            #region 值类型数据复制
            /*值类型复制*/
            List<int> list1 = new List<int> { 1, 2, 3, 4 };
            List<int> list2 = new List<int>(list1);
            list2[1] = 11;
            IsSame = object.ReferenceEquals(list1, list2);//out False  这两个是独立的实例
            
            /*引用类型String 复制,因为string调用了重载方法,所以和值类型一样,其他引用类型不可用如下方法*/
            //以上list1 list2是两个不同的实体
            List<string> lst1 = new List<string>() { "北京", "天津" };
            List<string> lst2 = new List<string>(lst1);
            lst2[1] = "TianJin";
            IsSame=object.ReferenceEquals(lst1, lst2);//out False  这两个是独立的实例
            
            #endregion


            List<string[]> lst11 = new List<string[]>() {
                 new string[]{"北京", "bj" },
                 new string[]{"天津", "tj" },
                 new string[]{"山东", "sd" }
            };

            /*不正确的方法*/
            //List<string[]> lst12 = new List<string[]>(lst11);//此时浅复制,因为List对象内容string[]是引用内容
            //lst12[1][1] = "tianjing~";                       //当list12改变时,lst11也改变

            //正确做法
            var lst12 = (List<string[]>)lst11.Select(x => x.Clone() as string[]).ToList<string[]>();
            lst12[1][1] = "tianjing~";
        }

查看评论

拷贝构造函数&nbsp;浅拷贝构造函数&nbsp;深拷…

1、拷贝构造函数:对象之间复制,或者使用一个对象给另一个初始化时使用。 2、拷贝构造函数特点:也是构造函数,但是,形参列表中必须有一个对本类对象的引用,并且如果有其他形参必须被初始化。 3、浅拷贝...
  • jiangbianxiumu
  • jiangbianxiumu
  • 2014-08-01 15:43:28
  • 284

c# 对象的深拷备

C# 引用类型对象在拷备时,一般有浅拷备与深拷备,浅拷备指向的是同一对象的引用地址,一个对象的修改必然会影响另一个对象,而深拷备是直接拷备对象的内容,而不是引用,拷备后的对象拥有新的引用...
  • crazyliyang
  • crazyliyang
  • 2017-07-26 15:50:46
  • 90

mybatis入门操作

test.java: package com.dqd.mybatis; import java.io.IOException; public class test { public s...
  • Grit_ICPC
  • Grit_ICPC
  • 2016-12-03 18:44:55
  • 294

一段java代码带你认识锟斤拷

@Test public void testKunJinKao(){ String str="我不是锟斤拷"; try { byte[] buff=null; //让我们先看看几...
  • 54powerman
  • 54powerman
  • 2017-05-02 10:12:05
  • 4262

BASE64�������ʮ���Ƶ�ʵ�ַ���

һ��BASE64�����ԭ�����BASE64���� ��ԭ��ܼ
  • zgqtxwd
  • zgqtxwd
  • 2008-04-30 08:46:00
  • 808

Java中文乱码——3、为何会出现"锟斤拷"

dd
  • fjqzju
  • fjqzju
  • 2014-03-26 10:41:19
  • 1914

深信服历年大部分笔试题目

  • 2008年11月20日 13:31
  • 105KB
  • 下载

android自定义手势解锁View

有时候为了程序的安全性,我们经常要采取一些安全措施,就像我们常用的支付宝那样,隔一定的时间再回到应用程序时会让用户利用手势去解锁应用程序,最近由于项目需求,也要求做这样一个功能,当用户切出本应用程序1...
  • lcq5211314123
  • lcq5211314123
  • 2014-11-08 11:22:55
  • 1706

深信服ac1000 说明书

  • 2013年01月16日 14:35
  • 7.46MB
  • 下载

jdbc连接数据库 The server time zone value '�й���׼ʱ��' is unrecognized or represents more... 错误

jdbc连接数据库 The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more… 错误...
  • qq_33850908
  • qq_33850908
  • 2017-07-19 21:24:27
  • 289
    个人资料
    等级:
    访问量: 3万+
    积分: 589
    排名: 8万+
    文章分类
    最新评论