引用类型

.NET Core CSharp初级篇 1-1

匿名 (未验证) 提交于 2019-12-02 22:06:11
本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 例如以下这句话:“张三是一名程序员,今年15岁重50.3kg,他的代号是‘A’,他家的经纬度是(N30,E134)。”,这句话就是一个字符串,使用双引号括起来。而15则表示是一个 整数类型 ,50.3就是小数类型,不过我们在 C# 中通常称为 浮点类型 ,最后一个经纬度,我们通常定位地点的时候都是成对出现,所以我们认为这二者是一个密不可分的结构,这种类型我们称为 结构体类型(struct) 。 以上我所说的数据类型都是一个所含有信息量一定的数值,我们称为 值类型 ;而张三这个人,他所含有的数据大小是不固定的,比如我又了解到了张三是一个富二代,那么他就会增加一个属性是富二代,我们需要更多的空间去存储他,张三这个变量我们通常就称为引用类型,而张三这个名字,我们就称为引用,如果你对C或者C++熟悉的话,张三这个名字就是指向张三这个人(对象)的一个 指针 。 在 C# 中,数据在内存中的存储方式主要分为在堆中存储和栈中存储。我们之前提到的值类型就是存储在栈中,引用类型的数据是存储在堆中,而数据是在栈中。 值类型:存储在栈(Stack,一段连续的内存块)中,存储遵循先进后出,有严格的顺序读取访问速度快,可通过地址推算访问同一个栈的其余变量。 引用类型:引用(本质上和C++中的指针一致)存储在栈中,内含的数据存储在堆中

MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用

匿名 (未验证) 提交于 2019-12-02 22:06:11
索引: 目录索引 一.API 列表   .DeepClone()     用于 Model / Entity / ... ... 等引用类型对象的深度克隆   特性说明     1. 不需要对对象做任何特殊处理     2.不受对象层次深度限制,均可实现深度克隆(下面会给出几个简单示例 ... ...) 二.API 使用    1.命名空间,只需: 1 using MyDAL.ModelTools;    2.被深度克隆的对象只需是一个 class ,如下: 1 public class ModelEntity 2 { 3 public int ValueField { get; set; } 4 5 public string ReferenceField { get; set; } 6 7 public ModelEntity ObjectField { get; set; } 8 }    3.深度克隆 / 深度复制 示例 1 // 对象准备 2 var obj = new ModelEntity 3 { 4 ValueField = 10, 5 ReferenceField = "源值10", 6 ObjectField = new ModelEntity 7 { 8 ValueField = 11, 9 ReferenceField = "源值11", 10

java引用传递,值传递

匿名 (未验证) 提交于 2019-12-02 21:53:52
2个interger的引用对象传给一个swap方法在方法内部进行交换,返回后 1.1 java中方法参数传值方式 java中方法传参数都是值传递的,只不过根据参数的类型是引用类型还是非引用类型 引用类型传递的是该类型的地址 非引用类型传递的是该变量的副本 1.2 Integer 源代码存在 一个int value变量中 1.5 可以通过反射变量来改private final 变量 public static void swap(Integer i1, Integer i2){ Field field = Integer.class.getDeclaredField("value"); field.setAccessible(true); //int temp = i1.intvalue(); //指向同一份内存地址 Interge temp = new(i1.intvalue()); field.set(i1,i2.intValue()); field.set(i2,temp); } 1.3 Integer -128到127之间的数会放入缓存,取这些数是从缓存取的 1.4 自动装箱和拆箱 原文:https://www.cnblogs.com/james0/p/9280559.html

java 四种引用类型

匿名 (未验证) 提交于 2019-12-02 21:53:52
java和c++最典型的区别就是内存的管理方式不同,java的内存管理是通过虚拟机来实现的,通过垃圾回收器释放内存。c++通常情况下是通过程序员手动释放。为什么说是通常呢?在c++有智能指针,通过引用计数方式释放内存。 在c++11中,智能指针分为强引用指针、强指针引用和弱引用指针。强引用指针每个指针独享一块内存区域、强指针引用引用是大家共享一块堆内存,弱引用指针很多时候在配合强指针引用使用,动态的知道所指的对象是否活着。还有就是解决循环引用的问题。java的引用类型和c++的智能指针有一定相似的地方。 java中的引用类型分为强引用、弱引用、虚引用和软引用四种。 强引用 Object object=new Object(); 这是java通常的创建对象的方式,jvm不会回收强引用所引用的对象,即使内存不足,发生OOM错误。 如果将object=null;那么在下次触发gc的时候我们new出来的这个对象就会被销毁。 弱引用 无论内存是否充足,在进行垃圾回收的时候,jvm都会将弱引用所引用的对象回收 String str=new String("hello world"); WeakReference<String> sf = new WeakReference<String>(str); str=null; System.out.println(sf.get()); System

java基础面试题(一)

匿名 (未验证) 提交于 2019-12-02 21:52:03
1.java中的数据类型,各占多少个字节?       2.面向对象的特性   1-封装:简单来说,封装就是把数据和操作数据的方法绑定起来,如果需要访问,可以使用已定义的接口进行访问   2-继承:从已有的类得到继承信息创建新的类的过程。提供继承信息的类称为父类(也叫超类,基类);得到继承信息的类称为子类(也叫派生类)   3-多态:允许不同的子类对同一消息做出不同的响应,也就是父类的引用指向子类的对象。而多态性又分为编译时多态和运行时多态。方法重载实现的是编译时多态(前绑定),方法重写实现的是运行时多态(后绑定)。实现多态的两件事:第一就是方法的重写(子类继承父类并重写父类中已有的和抽象方法);第二就是对象造型(父类的引用指向子类的对象)   4-抽象:将一类对象的共同特征总结出来构造类的过程。包括数据抽象和行为抽象。抽象只关注对象有哪些行为和属性,对于行为的细节并不关注 ***注意:对象的特性默认情况下有3种,封装,继承,多态。如果面试官说了四种,那就加上抽象 3.访问权限修饰符public,protected,private,default(默认)的区别即访问范围 4. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?   答:第一个是错的,因为1是int类型的,而s1+1的运算结果也是int类型的,需要强转

数据类型

痞子三分冷 提交于 2019-12-02 18:00:35
五大数据类型: 类 结构体 枚举 接口 委托 值类型(放在栈,基类是ValueType,分配一个值)和引用类型(放在堆,基类除了ValueType都可以。指向一个内存位置) 值类型在越出定义的作用域时消失,引用类型当堆被垃圾回收时。 值类型赋值给另一个的时候,就是对字段成员进行复制。 引用类型是在内存中重定向引用变量的指向。 C#中定义的值类型包括原类型( Sbyte、 Byte、 Short、 Ushort、 Int、 Uint、 Long、 Ulong、 Char、 Float、 Double、 Bool、 Decimal)、枚举 (enum)、结构 (struct) 引用类型包括:对象、类、数组、接口、委托、字符串 (String)等。 来源: https://www.cnblogs.com/cdjbolg/p/11756655.html

C#学习笔记【七】——堆和栈

柔情痞子 提交于 2019-12-02 12:21:23
7.1堆和栈简介 我们把内存分为堆 空间和栈空间。 栈空间比较小,但是读取速度快;堆空间比较大,但是读取速度慢 栈的特征,数据只能从栈的顶端插入和删除;堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除。 CLR的GC(Garbage Collector垃圾回收器)就是内存管理机制。 7.2值类型和引用类型 类型被分为两种:值类型(整数,bool struct char 小数)和引用类型(string 数组 自定义的类,内置的类)。 值类型只需要一段单独的内存,用于存储实际的数据,(单独定义的时候放在栈中)。 引用类型需要两段内存,第一段存储实际的数据,它总是位于堆中,第二段是一个引用,指向数据在堆中的存放位置。 当我们使用引用类型赋值的时候,其实是赋值的引用类型的引用(在栈内操作,赋值栈内存放的内存地址),并释放没有引用指向的堆空间。 Vector3 v1 = new Vector3();//定义的类 v1.x = 100; v1.y = 100; v1.z = 100; Vector3 v2 = new Vector3(); v2.x = 200; v2.y = 200; v2.z = 200; v2 = v1; v2.x = 300; Console.WriteLine(v1.x);//结果是300,因为v2=v1赋值时,v1和v2的引用都指向同一个堆空间

【CSharp】引用类型的相等性比较

爷,独闯天下 提交于 2019-12-02 05:40:42
关于引用类型的相等性比较,.NET中工提供了以下几种方式: static System.Object.ReferenceEquals() static System.Object.Equals() System.Object.Equals() 比较运算符(==) ReferenceEquals 静态方法,比较两个引用是否指向类的同一个实例,特别是两个引用是否包含内存中的相同地址。可以比较null,认为两个null是相等的。 Equals虚方法 默认实现,也可以用来比较引用。可以重写,进而可以按照值来比较对象。 Equals静态方法 该方法与虚方法功能相同,其区别是静态版本带两个参数。 两个都是null,则返回true 只有一个是null,返回false 两个都非null,调用虚版本方法进行处理 比较运算符(==) 对引用(string除外)比较地址,对值比较内容 来源: https://blog.csdn.net/zhy29563/article/details/102723490

值类型和引用类型

牧云@^-^@ 提交于 2019-12-02 04:46:58
假如我有一份报纸,我觉得上面的新闻很好看,想让我朋友也看看,我就复印了一份给了他,就是值类型,他在报纸上的涂涂画画不会响应到我的报纸上 假如我做了个网站,我想让我朋友也能访问,就把网站地址给了他,这就是引用类型,我修改了网站之后的效果,也会响应到他看到的网站上 类class是引用类型, 结构struct是值类型, 数组是引用类型,(int[]) 枚举是值类型(enum) 委托和接口时引用类型 引用类型都在堆上,但是值类型不一定都在栈上(有特殊情况) 假如类里有个int型的实体变量,这个值就会和这个对象一直绑定在堆上面 来源: https://www.cnblogs.com/hgdhome/p/11730346.html

为面试做准备——前端实习面试题整理(一)

ε祈祈猫儿з 提交于 2019-12-02 03:26:31
(以下是从各种网站、同学处整理的前端实习面试题,答案也为自己整理,有错误的话欢迎指正) 1、谈谈Js中基本类型和引用类型。 答:①基本类型:undefined、null、string、number、Boolean、symbol(ES6)    其中分为普通基本类型和特殊基本类型:    普通基本类型:undefined、null、symbol    特殊基本类型:string、number、Boolean   ②引用类型:Object、Array、RegExp、Date、Function ③不同:   基本类型 基本类型的变量是存放在栈内存(Stack)里的 基本数据类型的值是按值访问的 基本类型的值是不可变的 基本类型的比较是它们的值的比较   引用类型 引用类型的值是保存在堆内存(Heap)中的对象(Object) 引用类型的值是按引用访问的 引用类型的值是可变的 引用类型的比较是引用的比较   ④堆内存和栈内存   栈:连续存储,大小固定。特殊地,null属于object类型,表示一个空指针对象,但是存在栈内存中。   堆:非连续的树形存储结构。特殊地,new一个实例,生成的是一个对象,即使 var foo = new String("123123") var bar = String("123123") console.log(a==b, a===b)   会输出true