引用类型

C#值类型与引用类型

一个人想着一个人 提交于 2020-02-15 17:30:55
值类型(Value Type),值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变量本身就包含了其实例数据。其在MSDN的定义为值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。我们由上图可知,值类型主要包括简单类型、结构体类型和枚举类型等。通常声明为以下类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等时,该变量即为值类型。 引用类型(Reference Type),引用类型实例分配在托管堆(managed heap)上,变量保存了实例数据的内存引用。其在MSDN中的定义为引用类型存储对值的内存地址的引用,位于堆上。我们由上图可知,引用类型可以是自描述类型、指针类型或接口类型。而自描述类型进一步细分成数组和类类型。类类型是则可以是用户定义的类、装箱的值类型和委托。通常声明为以下类型:class、interface、delegate、object、string以及其他的自定义引用类型时,该变量即为引用类型。 namespace codeTest { class Program { static void Main(string[] args) { //定义值类型和引用类型,并完成初始化

Java中的二元操作符:instanceof

假如想象 提交于 2020-02-14 14:11:03
Java中的二元操作符:instanceof 判断一个引用类型的变量所指向的对象是否是一个类(或者接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,该运算返回boolean类型的数据。 格式: result = object instanceof class; 注:如果object是null,返回false 来源: CSDN 作者: Mason97 链接: https://blog.csdn.net/Mason97/article/details/104308990

JavaScript学习之内存

£可爱£侵袭症+ 提交于 2020-02-13 11:31:22
初学JavaScript时,看红皮书了解了JS基本类型和引用类型在内存中的位置,结果看了简书里的一篇文章,发现对这块的了解还是有些缺陷。 基本类型 JavaScript中的基本类型有五种: Undefined , Null , Number , String , Boolean 。它们是按值访问,可以操作保存在变量中实际的值。这些基本类型是存放在变量对象中的,而变量对象也是存放在堆内存中。只是由于变量对象的特殊性,我们在理解时才把变量对象与堆内存区分开来。 下面我们用代码与图更好的理解这个过程 123 var a = "5";var b = a;a = 10; 基本类型进行赋值操作时,会为新的变量分配一个值,这两个变量相互独立,互不影响。即使改变了a的值,b的值也不会变。 引用类型 引用数据类型的值是保存在堆内存中的对象。在操作对象时,实际上是在操作对象的引用而不是实际的对象。因此,引用类型的值都是按引用访问的。这里的引用,我们可以粗浅地理解为保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。 12大专栏 JavaScript学习之内存ne">3 var a = {name: "Kol"}var b = ab.name = "Kylen" 引用类型的复制同样也会为新的变量自动分配一个新的值保存在变量对象中,但不同的是,这个新的值,仅仅只是引用类型的一个地址指针

unity面试的基础问题(1)

浪尽此生 提交于 2020-02-12 11:44:46
oop:面对对象 特点: 继承:构造函数(先创建父类再子类)析构函数(先销毁子类然后父类) 多态:父类的指针指向子类而调用子类的方法 封装:不被别的访问 装箱:将值变为引用类型 拆箱:将引用类型变为值类型 内存分类: 栈:先进后出 参数/new 值类型/申明变量 堆:new的引用类型分配在堆上 (还有ref和out结合起来可学习一下) 全局变量:static 静态 const 常量 代码区;编译的方法(基本用不着) 下面有个需要注意的小问题Button的事件最好在堆上开辟 进程 线程 协程的区别? 1,进程拥有自己独立的堆和栈。(既不共享堆,亦不共享栈,进程由操作系统调度) 2,线程拥有自己独立的栈和共享的堆。(共享堆,不共享栈,线程亦由操作系统调度(标准线程是的))(线程是在主线程里开辟的(和主线程不是并列关系,不能在同一时间启用同一资源)) 3,协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。(协程是在主线程里开辟的,不需要开锁) 一个应用程序一般对应一个进程,一个进程一般有一个主线程,还有若干个辅助线程,线程之间是平行运行的,在线程里面可以开启协程,让程序在特定的时间内运行。 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。 lock 一个方法锁(具体可细查

引用类型——数组

不问归期 提交于 2020-02-12 00:04:06
JavaScript 数组 javascript中数组也是最常使用的对象之一,数组是值的集合,由于弱类型的原因,javascript中数组十分灵活、强大,不像java等强类型高级语言数组只能存放同一类或其子类型元素,javascript在同一数组中可以存放多种类型的元素,而且长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改。 创建数组 1.无参构造函数,创建一空数组 var a1 = new Array(); 2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组。 var a2 = new Array(5); 3.带有初始化数据的构造函数,创建数组并初始化参数数据 var a3 = new Array(4,'hello',new Date()); 字面量 1.使用方括号,创建空数组,等同于调用无参构造函数 var a4=[]; 2.使用中括号,并传入初始化数据,等同于调用调用带有初始化数据的构造函数 var a5=[10]; 注意点 1.在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中 1 var a1=new Array(5); 2 console.log(a1.length);//5 3 console.log(a1); //[]

Java中的值传递

假如想象 提交于 2020-02-11 11:39:30
几个重要概念 实参、形参 形式参数:定义函数名和函数体时候使用的参数,目的用来接收调用该函数时传入的参数 实际参数:在调用有参函数时,主调函数与被调函数之间有数据传递关系。实际参数是调用有参方法的时候真正传递的内容。 public void tes(String name){ // 形式参数 name System.out.println(name); } public static void main(String[] args) { Test test = new Test(); test.tes("caijicoder"); // 实际参数 caijicoder } 值类型、引用类型: 值类型就是基本数据类型,8 种基本类型除外的数据类型都是引用类型。 两种类型分别表示两种内存分配方式。一个值类型数据直接在栈上分配,存储所包含的值,其值就代表数据本身。一个引用类型指向的数据在堆上分配,引用类型的值是这个堆上数据的地址。 int num = 10; String str = "hello"; num 是基本类型(值类型),值就直接保存在变量中。 str 是引用类型,变量中保存的只是实际对象的地址(0x10),而不是 Hello 这个字符串。 值传递、引用传递: 值传递(pass by value):指在调用函数时,将实参复制一份传递到函数中,形参接收到的内容其实是实参的一个拷贝

JS数据类型和堆栈+变量比较和值的复制+参数传递和类型检测

…衆ロ難τιáo~ 提交于 2020-02-10 23:26:10
变量命名 变量名:字母 数字 下划线 美元符$ jquery: $ $.each() $ === jQuery underscore( js的一个函数库) : _ _.each() 关键字 : if for 保留字 : class 推荐有意义的命名: buttonCancel button_cancel btnCancel 数据类型和堆栈 基本类型(可以修改) : 4 str true undefined null 引用类型(不能修改) : { } [ ] var score = 40; score = 50; 上面属于覆盖,不属于修改 var str = "hello"; var newStr = str.replace("h", ""); document.write( str + "/" + newStr); 字符串操作返回新的字符串,原字符串没有改变 var obj = {}; console.log(obj); obj.name = "cyy"; obj.age = 25; obj.name = "cyy2"; delete obj.age; console.log(obj); 引用类型的属性可以添加,可以修改,可以删除 var name = "cyy"; name.age = 25; console.log(name.age);//undefined

JavaSE学习笔记(7)---数组

我的未来我决定 提交于 2020-02-10 23:15:12
JavaSE学习笔记(7)---数组 1、什么是数组 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 其元素必须是相同类型,不允许出现混合类型。 数组类型可以是任何数据类型,包括基本类型和引用类型。 提示 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的 2、数组的声明和初始化 声明数组 type [] array = {} //例如 int [] a = {1,2,3,4}; int [] b = new int[4]; 注意事项 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。 声明一个数组的时候并没有数组真正被创建。 构造一个数组,必须指定长度。 创建基本类型一维数组 public class Test { public static void main(String args[]) { int[] s = null; // 声明数组; s = new int[10]; // 给数组分配空间

c#基础之值类型与引用类型

拜拜、爱过 提交于 2020-02-10 07:52:13
(1)区别 值类型分配在堆栈上,引用类型是在托管堆上分配的。这里需要指出一点: 如果一个引用类型中的某个属性是值类型,这个值类型的属性是分配在托管堆上的 。 所有的值类型都是隐式密封的(sealed),例如 :你不可能继承int 来构造自己的类型。 值类型的每一次赋值都会执行一次逐字段的复制,所以如果是频繁赋值也会造成性能上的压力,引用类型的赋值只是指针的传递,其实也是生成新的指针实例。 引用类型额外有类型对象指针和同步块索引,值类型是没有的。所以我们平时使 用lock 锁的对象不可能是值类型,因为值类型没有同步块索引 (2)相同点 值类型和引用类型都是System.Object的子类 值类型和引用类型都可以继承接口。(很多人都认为值类型不能继承接口) (----以上引自http://www.cnblogs.com/zhanlang/p/9603592.html) (3)值类型 --分为简单值类型和复合值类型--它们统一继承 System.ValueType。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。 值类型超出作用范围系统自动释放内存。 1.简单值类型:整型:Int;长整型:long;浮点型:float;字符型:char;布尔型:bool 2.复合值类型(里面可以定义更小值类型):struct,enum等。注意

Java关键字(一)——instanceof

孤街浪徒 提交于 2020-02-09 05:37:56
目录 1、obj 必须为引用类型,不能是基本类型 2、obj 为 null 3、obj 为 class 类的实例对象 4、obj 为 class 接口的实现类 5、obj 为 class 类的直接或间接子类 6、问题 7、深究原理 8、instanceof 的实现策略   instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: 1 boolean result = obj instanceof Class   其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。   注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。 回到顶部 1、obj 必须为引用类型,不能是基本类型 1 2 3 int i = 0 ; System.out.println(i instanceof Integer); //编译不通过 System.out.println(i instanceof Object); //编译不通过   instanceof 运算符只能用作对象的判断。 回到顶部 2、obj 为 null 1 System