引用类型

C#参数传递小结

非 Y 不嫁゛ 提交于 2019-12-24 10:09:58
     在C#中方法的参数可以通过两种方式传递: 值方式传递、引用方式传递 。   通过引用方式传递参数,允许函数成员更改参数的值并保持该更改。若要通过引用方式传递,则需使用关键字ref或out。在C#中除非特别说明,否则都是以值方式传递数据。值类型变量直接包含其数据;引用类型变量不直接包含其数据,它包含的是对数据的引用。因此按值方式传递变量意味着向方法传递变量的一个副本,按引用方式传递变量意味着向方法传递变量的引用。   根据参数类型和传递方式的不同,有以下4种情况: 值类型参数按值方式传递 引用类型参数按值方式传递 值类型参数按引用方式传递 引用类型参数按引用方式传递    *按引用传递可以用ref修饰,也可以用out修饰,具体区别后面会做介绍。   下面将分别进行说明:    1.值类型参数按值方式传递   值类型参数传递的是该值类型的一个拷贝,被调用方法操作的是属于自己本身的拷贝,因此不影响原来调用方法中的参数值。见如下Demo: static void Main(string[] args){  int num1 = 10;  Add(num1);  Console.WriteLine(num1);}static void Add(int num1) {   num1 = num1 + 5;   Console.Write(num1 + "\t"); }  

JavaScript传递参数

六眼飞鱼酱① 提交于 2019-12-24 06:20:02
ECMAScript 中所有函数的参数都是按值传递。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样 ——《JavaScript高级程序设计(第三版)》 本篇博客将围绕书中这一知识点进行深入分析。 相关概念 首先要弄清楚一些概念:变量、值、值的类型、引用、对象。如果这些概念没搞清楚,就没办法讨论这个问题。 变量 :变量就是一个定义在某个作用域的名字(name),它是一个identifier。它绑定(bind)了一块内存。 值 :值就是变量绑定的那块内存里面存放的数据。至于存放的数据的具体代表什么(含义是什么),暂且不管。但是本质上就是一段二进制数。 值的类型 :即变量绑定的那块内存里放的数据应该如何去解释,或者说如何解码。在JS中值的类型有很多种,但是可以归结成两类:基本类型和引用类型。基本类型就是说:变量绑定的那块内存里放的数据的含义就是它看起来的那个样子。引用类型就是说:变量绑定的那块内存里放的数据,并不是我真正想要的数据,它是一个元数据、一个地址,一个指向我真正想用的数据的位置的指针。 引用:指向对象的指针 对象:上面说的那些不能被变量直接绑定,而是要通过引用来间接绑定的数据就是对象。而且对象数据与非变量数据相比有一个特点,即它是有内部结构的,即属性。 ECMAScript 变量包含两种不同的数据类型的值:基本类型值和引用类型值

equals与==

大城市里の小女人 提交于 2019-12-23 12:53:10
对于 == : 作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 作用于引用类型的变量,则比较的是所指向的对象的地址; 对于 equals: equals方法不能作用于基本数据类型的变量; 如果没有对Object中equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容; 来源: CSDN 作者: 浅笑不再 链接: https://blog.csdn.net/weixin_45339760/article/details/103662518

C#中struct与class的区别

我与影子孤独终老i 提交于 2019-12-23 03:12:18
一. 类与结构的差别   1.值类型与引用类型   结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:in t 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创 建更多的值类型   类是引用类型:引用类型在堆上分配地址   堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑 复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑   因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之 间的赋值只是复制引用   注:   1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类 型的基类型都是object   2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆 上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态, 且对象不可用   2.继承性   结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的 用sealed声明,可是结构是隐式的sealed .   类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也 能被继承   注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 例如:结构实现接口  

scala入门基础知识-语法及控制结构

被刻印的时光 ゝ 提交于 2019-12-23 01:03:50
1 Scala基础知识和语法 1.1 语法特点 (1)可拓展:面向对象、函数式编程 (2)兼容JAVA:类库调用、互操作 (3)语法简洁:代码行短、类型推断、抽象控制 (4)静态类型化:可检验、安全重构 (5)支持并发控制:强计算能力、自定义其他控制结构 1.2 Scala和Java的关系 (1)都是基于JVM虚拟机运行的 Scala编译之后的文件也是.class,都要转换为字节码,然后运行在JVM虚拟机之上。 (2)Scala和Java相互调用 在Scala中可以直接调用Java的代码,同时在Java中也可以直接调用Scala的代码 (3)Java 8 vs Scala Java 8(lambda)没有出来之前,Java只是面向对象的一门语言,但是Java 8出来以后,Java就是一个面向对象和面向函数的混合语言了。 首先我们要对Scala进行精确定位,从某种程度上讲,Scala并不是一个纯粹的面向函数的编程语言,有人认为 Scala是一个带有闭包的静态面向对象语言),更准确地说,Scala是面向函数与面向对象的混合。 Scala设计的初衷是面向函数FP(function progaming),而Java起家是面向对象OO(objected oriented),现在两者都是OO和FP的混合语言,是否可以这么认为:Scala = FP + OO,而Java = OO+ FP

【C#本质论 九】值类型---结构之力

牧云@^-^@ 提交于 2019-12-22 14:36:49
研一的时候学习C#,发现和自己学的Java不一样,为啥,C#里还有结构体这个东西,这个东西不多余么?今天学习了下结构体,发现,这东西确实挺多余的,没啥用, 但是通过对结构体的学习,可以让我更好的理解值类型 ,C# 中的简单类型,如 int、double、bool等都是结构类型 。如果需要的话, 甚至可以使用结构类型结合运算符运算重载,再为 C# 语言创建出一种新的值类型来 。 在进入正题前,先来简单复习下值类型和引用类型: 值类型要求直接创建内存拷贝, 变量直接包含数据,两个变量不可能引用同一内存位置 (ref和out只不过是给变量起了一个别名,实际上传递的还是该变量的地址。一个指向栈里的地址) 引用类型在栈里传递的是引用个,是指向堆里的地址。 栈复制的好处是垃圾回收的清理代价低,但是却需要频繁的拷贝,对性能造成影响 ,如果拷贝值类型的代价比拷贝引用高出四倍,就应该把它考虑设计成引用类型了。 结构 除了string和object是引用类型,其它所有C#内建类型都是值类型。开发者甚至可以通过struct自己定义值类型。 struct Angle { public Angle ( int degrees , int minutes , int seconds ) { Degrees = degrees ; Minutes = minutes ; Seconds = seconds ;

Java并发编程之原子操作类

喜你入骨 提交于 2019-12-21 14:18:56
什么是原子操作类 当更新一个变量的时候,多出现数据争用的时候可能出现所意想不到的情况。这时的一般策略是使用synchronized解决,因为synchronized能够保证多个线程不会同时更新该变量。然而,从jdk 5之后,提供了粒度更细、量级更轻,并且在多核处理器具有高性能的原子操作类。因为原子操作类把竞争的范围缩小到单个变量上,这可以算是粒度最细的情况了。 原子操作类相当于泛化的volatile变量,能够支持原子读取-修改-写操作。比如AtomicInteger表示一个int类型的数值,提供了get和set方法,这些volatile类型的变量在读取与写入上有着相同的内存语义。原子操作类共有13个类,在java.util.concurrent.atomic包下,可以分为四种类型的原子更新类:原子更新基本类型、原子更新数组类型、原子更新引用和原子更新属性。 下面介绍这各种原子操作类 1 原子更新基本类型:使用原子方式更新基本类型 AtomicBoolean:原子更新布尔变量 AtomicInteger:原子更新整型变量 AtomicLong:原子更新长整型变量 2 原子更新数组:通过原子更新数组里的某个元素 AtomicIntegerArray:原子更新整型数组的某个元素 AtomicLongArray:原子更新长整型数组的某个元素 AtomicReferenceArray

原型类型、引用类型

☆樱花仙子☆ 提交于 2019-12-21 11:08:51
原始类型 原始类型的数据都是一些比较简单数据,比如字符串,数字等,比如:true和25,这些数据会被直接存储在变量的内存空间中。ECMAScript 5 给我们提供了5种原始类型: 类型 数据 说明 Boolean true、false 布尔值,true或false Number 12、12.5、NaN 整型、浮点型、特殊值NaN(Not a number) String 'hello'、"hello" 被单引号或双引号扩起来的字符或字符串 Null null 只有一个值null Undefined undefined 只有一个值undefined。任何只声明而没有赋值的变量都会被赋值为undefined。 变量在存储原始类型的数据时,直接将数据存储到变量的内存空间中。当我们将存储原始类型数据的变量赋值给另一个变量时,其实是将变量存储的值复制了一份保存到了另一个变量中。 正因为每一个变量都是使用自己独立的存储空间保存原始类型的数据,因此当我们改变一个变量中的数据时不会影响到另个变量中的数据。 检测原始类型的数据 检测原始类型的数据最好的方式是使用typeof操作符,该操作符会返回一个表示数据类型的字符串。 原始类型数据的方法 虽然字符串,数字,布尔值是原始数据类型,但是也有很多方法可以使用(null和undefined没有方法)。 引用类型 引用类型的数据稍微复杂一点

.NET基础面试题整理

☆樱花仙子☆ 提交于 2019-12-21 01:10:00
今年毕业,本学期找工作期间在面试前做的一些临时的准备 以下的关于老赵分享的面试题解答参考了手头的书籍和视频教程,以及网上的资料,现整理出来希望对大家有所帮助,不对或欠佳的地方望大家指出来我好改正。 1.什么是.NET?什么是CLI?什么是CLR?IL是什么? (1).net用于代码编译和执行的集成托管环境,换句话,它管理应用程序运行的方方面面,包括首次运行的编译,为程序分配内存 存储数据和指令,对于应用程序授予或拒绝相应的权限,并启动管理应用程序的执行,剩余内存的在分配。由于所有.net应用程序 都是在.net framework上面执行,所以开发人员只需考虑与.net framework打交道,而不必关系和底层操作系统上面的实现 包括CLR和BCL (2).CLI(common language infrastructure)公共语言基础结构,一项国际性的标准,没有规定标准具体如何实现。相反,它描述了一个 CLI平台在符合标准的前提下应该具有什么行为。包含了:运行时(CLR),公共中间语言(CIL),公共类型系统(CTS), 公共语言规范(CLS),元数据(Metadata),框架(framework) (3)CLR:公共语言运行时,负责加载和运行程序 IL:中间语言,C#编译器将C#代码转换成IL,运行时能够理解IL,并编译成机器码 2.JIT是什么,它是如何工作的?GC是什么

ref和引用类型传参的区别

吃可爱长大的小学妹 提交于 2019-12-20 23:57:03
引用类型对象本身不改变,只改变对象的属性时,我们在操作同一个对象;(类似c++指针指向的地址) 如果连对象本身都可能会改变,又要保证在操作同一个对象,就用ref传引用类型的对象吧!(类似c++指向一个地址的指针,这样地址就可以改变了) ref不是很好理解,用的人比较少,一般都在在方法返回值里返回新创建的对象。 1.01 365 =37.8     1.02 365 =1377.4 0.99 365 =0.03     0.98 365 =0.0006 来源: https://www.cnblogs.com/bile/p/6911893.html