精华内容
下载资源
问答
  • 值的类型有什么
    千次阅读
    2021-10-16 19:02:03

    区别:

    1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。

    2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指

    针来引用实例。

    3、值类型继承自 ValueType (注意:而 System. ValueType 又继承自 System.Object);而引

    用类型继承自 System.Object。

    4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情

    况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因

    此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地

    耻。

    5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇幅

    来深入讨论这个话题。

    6、典型的值类型为:struct,ewrim 以及六量的它置信类型;而能称为类的都可以说是引用

    类型。

    7、值类型的内存不由 GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会

    自行释放,減少了托管堆的压力,因此具有性能上的优势。例如,通常 struct 比 class 更高

    效;而引用类型的内存回收,由 GC 来完成,微软甚至建议用户最好不要自行释放内存。

    8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承

    或者多继承接口;而引用类型一般都有继承性。

    9、值类型不具有多态性;而引用类型有多态性。

    10、值类型变量不可为 null 值,值类型都会自行初始化为 0 值;而引用类型变量默认情况下,

    创建为 null 值,表示没有指向任何托管堆的引用地址。对值为 null的引用类型的任何操作,

    都会抛出 NullReferenceException 异常。

    11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类

    型通常只有一种形式:装箱

    什么是面向对象什么是面向过程?

    面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。

    “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。简写为POP。

    更多相关内容
  • 值类型和引用类型 是什么 区别

    千次阅读 2021-08-15 15:57:57
     值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和struct统称为值类型值类型变量声明后,不管是否已经赋值,编译器为其分配内存。  引用类型(reference type)...

    1、简单比较

      值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。

      值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。

     

     

     引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。

     

    值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。引用类型的对象总是在进程堆中分配(动态分配)。

    2、相同点

    • 引用类型可以实现接口,值类型当中的结构体也可以实现接口
    • 引用类型和值类型都继承自System.Object类。

    3、不同点

      1)范围方面

    • C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
    • C#的引用类型包括:数组,用户定义的类、接口、委托,object字符串。

      2)内存分配方面

    • 数组的元素不管是引用类型还是值类型,都存储在托管堆上。【注意:托管堆和进程堆,是一种么?另外:线程堆栈(Thread Stack)和托管堆(Managed Heap),日后会再单独涉及】
    • 引用类型中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放)

      3)适用场合

      值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

    • 引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封(seal)的;
    • 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型,如   int? a = null;  );
    • 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。

    4)经历使用:

    在一个循环中(循环外有一个集合的定义),如果将一个引用类型在循环外声明,然后在循环中赋不同的值,这时运行后,我们会发现集合中的这个引用类型对象的集合都是相同的值。这是因为集合内存储的是同一个在栈上的引用地址,而非具体在堆上的值。

    而如果是值类型,无论在循环内外,都可以在集合内赋不同的值,并且储存。

    http://www.360doc.com/content/18/1224/18/13328254_804168072.shtml

    展开全文
  • 值类型和引用类型有什么区别?

    千次阅读 2018-03-11 17:22:15
    byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。string,类等皆为引用类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。此时该值存储于栈上;int i=10;执行...

    byteshortintlongfloatdoubledecimalcharbool struct 统称为值类型。

    string,类等皆为引用类型。

    值类型变量声明后,不管是否已经赋值,编译器为其分配内存。此时该值存储于栈上;int i=10;执行之前为默认一个值0。

    引用类型定义时在栈上开辟一个空间用来存放其在堆上的地址,当赋值或者实例化时候就会在堆上开辟一个空间,然后把堆中的地址存放在栈中,这时候栈就存放了其地址。

    内存分配如下图:

    引用传递的另外一个实例



    为了解决频繁的装箱和拆箱消耗资源,引入了泛型的概念,泛型是类,是引用类型,但是在自己内部做了特殊的处理,使用过程不会进行装箱拆箱操作


    展开全文
  • golang中的值类型和引用类型

    千次阅读 2019-08-20 20:48:29
    值类型与引用类型 值类型 值类型:这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &...

    值类型与引用类型

    不管是Java还是golang中,都有值类型和引用类型的概念。在使用两者时,发现这两种语言之间还是有差异的。

    值类型

    值类型:这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。 值拷贝

    引用类型

    引用类型:引用类型拥有更复杂的存储结构:(1)通过make创建并分配内存 (2)初始化一系列属性:指针、长度、哈希分布、数据队列等。一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个元素所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个变量中。

    区别

    值类型和引用类型两者之间的主要区别:拷贝操作和函数传参。

    数组array和切片slice的实例

    1)如下代码片段定义了一个数组a,它是值类型,复制给b是值拷贝copy,当b发生变化后a并不会发生任何变化,程序的执行结果如下所示:

    //由 main 函数作为程序入口点启动
    func main() {
    	a :=[5]int{1,2,3,4,5}    //数组Array类型,带有具体的长度
    	b := a   //值拷贝,等价于a :=[5]int{1,2,3,4,5}, b :=[5]int{1,2,3,4,5}
    	b[2] = 6 //b :=[5]int{1,2,3,4,5},b[2]=8, b = [5]int{1,2,6,4,5}
    	fmt.Println(a, b)
    }
    

    程序运行结果:
    [1 2 3 4 5] [1 2 6 4 5]

    2)切片则不然,由于切片是引用类型,其拷贝(赋值)属于址拷贝,所以其中一个元素的值发生变化,拷贝的另一方也会发生改变。
    //由 main 函数作为程序入口点启动

    func main() {
    	a :=[]int{1,2,3,4,5}  //切片Slice类型,不带长度
    	b := a                //址拷贝
    	b[2] = 6              
    	fmt.Println(a, b)
    }
    

    分析:
    切片的底层数据结构其实是一个指针,切片a和b本质上指向同一个底层数组。
    程序运行结果:
    [1 2 6 4 5] [1 2 6 4 5]

    golang中的struct类型

    Golang中没有class关键字来定义类,对于事物的抽象以struct来定义,因此一个struct变量可以被看做一个类实例。但是这有别于java,因为struct在方法中传参时是值类型而非引用类型,所以当我们需要在方法内改变这个对象的字段值时,应该使用的是struct变量的指针,而非struct变量。例如:

    type Student struct{
             Name string
    }
     
    func (s * Student) Set(name string){
                  s.Name = name
    }
    func (s Student) Get()string{
               return s.Name
    }
    

    原文链接:https://blog.csdn.net/zerro99/article/details/11525757

    由上可知:

    • 如果方法内部会修改当前对象的字段或改变其值,需要用指针。
    • 由于值传递是(内存)复制,因此,如果对象比较大,应该使用指针(地址),避免内存拷贝(值类型等变量指向内存中的值,如果有值类型变量存放大量元素,或造成内存的大量拷贝)。

    注意:不见得使用指针就一定好过传值,因为按照 Go 的内存管理策略,涉及指针和引用的对象会被分配到 GC Heap 上。如果对象很 “小”,显然要比在栈上进行值拷贝 “耗费” 更多。

    与Java差异

    另外与java不同的一点,数组Array在golang里并不被当做引用类型传递,而是值类型传递。按照Golang的说法,Golang中所有的基本类型都属于值类型,但是有几个类型比较特殊,表现出引用类型的特征,分别是slice、map、channel、interface,除赋值以外它们都可以当做引用类型来使用。因此当我们这样做时,可以直接使用变量本身而不用指针:

    type MyMap map[string]string
     
    func (s  MyMap) Set(name,value string){
                  s[name] = value
    }
    
    func (s MyMap) Get(name string)string{
               return s[name]
    }
    

    上面的例子由于MyMap是一个map,而map是引用类型,因此在方法中作为参数使用时可以直接使用MyMap来改变其值,而不用使用MyMap的指针,其实map本身是一个字典的指针。

    展开全文
  • C#详解值类型和引用类型区别

    万次阅读 多人点赞 2016-04-20 17:59:42
    首先,什么值类型什么是引用类型? 在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 值类型(value type):byte,short,int,long,float,double,decimal,...
  • 值类型和引用类型

    千次阅读 热门讨论 2019-01-02 20:18:16
    值类型:直接存储值,在栈上存储其值 注:值类型变量声明后,不管是否已经赋值,编译器为其分配内存 引用类型:存储对其值的引用,在栈上存储地址,在堆上存储值 注:引用类型当声明一个类时,只在栈中分配一小片...
  • 一、值类型(struct)与引用类型(class)的不同点 1、内存管理方式不同,值类型一般分配在栈上,引用类型一般分配在堆上。这就意味着引用类型分配与释放将会是个复杂的过程,值类型一般没有析构方法; 2、引用...
  • C#中引用类型和值类型分别哪些

    万次阅读 2018-06-15 02:12:58
    C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。 C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。 数组的元素,不管是引用类型还是值类型,都存储在托管堆...
  • unity中的值类型和引用类型

    千次阅读 2019-08-14 16:32:53
    一、值类型和引用类型概念 值(value)类型 :Unity中的vector3、quaternion是structs,它们是值。 引用(feference)类型 :Unity中的transform、gameobject是类类型,所以它们是引用。引用类型是对数据存储位置...
  • 实际应用中,AD采集交流信号后,可能需要各个之间相互转换比较等,就需要这几个之间有什么关系。先说说这几个的定义。 峰峰值Vpp(Peak to Peak)。 峰峰值是指一个周期内信号最高和最低之间差的, ...
  • 浅谈java中的值类型和引用类型

    千次阅读 2018-07-23 11:19:22
    1、值类型 (1)也就是基本的数据类型分为:四类八种 (2)四类:整型、浮点型、字符型、布尔型 (3)八种:整型4种--byte、short、int、long  浮点型2种--float、double  字符型:char  布尔型:boolean ...
  • Go语言中的值类型和引用类型

    千次阅读 2018-05-04 20:50:10
    一、值类型和引用类型值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,...
  • C# “值类型“和“引用类型“在内存的分配

    千次阅读 多人点赞 2021-08-01 01:37:43
    在代码中每创建一个变量,...值类型有哪些? int"整数" double"高精度小数" char(单字符) decimal(小数) bool(布尔) enum(枚举) struct(结构) 等等… 引用类型哪些? string 数组 自定义类 集合 object 接口 等等…
  • c#中提供的数据类型两类,值类型和引用类型。 概念上,值类型,直接存储其值;引用类型,存储对其值的引用。 内存空间上,值类型在栈中操作;引用类型在堆中分配存储单元。 其中对于栈和堆的理解参考知乎。 ...
  • 下面是运用指针而改变 用&符号取得变量地址,用*符号取得地址 代码快 package main import ( "fmt" ) func main () { // 指针 输出变量地址 var number int = 10 //number 地址是: 0xc000012070, ...
  • 学过java基础的人都知道,在java中参数的传递过程中有值传递和应用传递,那么这两个到底有什么区别呢,下面我通过例子为大家详细的介绍下。 我们都知道Java中八种数据类型,基础数据类型分别是:byte,short,int...
  • Golang断言判断值类型

    千次阅读 2021-02-04 10:18:53
    v,e:=i.(string)//返回value和error值,当err值为true则转化成功,value的值为括号中的值类型,当err值为false,则转化不成功 也可以通过反射判断值的类型 name:="test" t:=relfect.TypeOf(name) fmt.Println(t)//...
  • js值类型和引用类型的区别

    千次阅读 多人点赞 2018-04-28 10:42:48
    1. javascript中变量类型分为值类型(基本数据类型)和引用类型(1) 值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null(2) 引用类型:Array(数组),Object(对象),Function(函数)2. ...
  • C#中的DateTime是值类型还是引用类型

    千次阅读 2017-04-12 09:29:42
    近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容 结论:DateTime是值类型,因为DateTime是结构体,而结构体继承自System.ValueType,属于值类型   一、DateTime是...
  • C# 值类型与引用类型

    千次阅读 2018-07-19 14:31:09
    值类型与引用类型 只所以要提这两个概念,是因为很好得理解这两个概念助于我们写出比较高效的C#代码。 我们知道,C#中的每一种类型要么是值类型,要么是引用类型。所以每个对象要么是值类型的实例,要么是引用...
  • unity学习——值类型和引用类型

    千次阅读 2017-09-19 17:29:02
    在分析C#中的值类型和引用类型之前,先通过两个例子来使抽象的概念变得更加具体而生动。 假设你正在看一本书,而此时你的朋友也很想跟看你手上的那本书。为了能让你朋友看到,要么你将自己的书借给对方,要么在复制...
  • 关于 “引用类型保存在堆上,值类型保存在栈上”是不准确的 关于 堆栈 早期的理解是 内存的两块区域。 堆呢 速度快 但是 比较小。二栈呢 速度稍慢,但是空间比较大。 在早期 关于 说道 值类型 和 引用类型的时候...
  • js两种数据类型:基本数据类型和引用数据类型 基本数据类型:number、string、boolean、undefined、null、symbol 在 Java 中,字符串是引用类型 引用数据类型:Array、Function、Object 等 堆和栈 程序...
  • NaN 属性代表一个...虽然这看上去很简单,但 NaN 一些令人惊讶的特点,如果你不知道它们的话,可能会导致令人头痛的bug。 首先,虽然 NaN 意味着“不是数字”,但是它的类型,不管你信不信,是 Number...
  • Python中的值类型与引用类型

    千次阅读 2018-07-03 20:40:56
    Python中的值类型与引用类型 值类型 在Python中,数值,字符串,元组本身是值类型,本身不允许被修改。 例子: a = 1 b = a a = 2 print(b) #输出的结果是1 修改值类型的值,只是让它指向一个新的内存地址...
  • 关于值类型和引用类型的相关问题

    千次阅读 2019-12-18 00:40:31
    1、什么值类型什么是引用类型? 值类型保存的是具体的值,引用类型保存的是值得地址,例如: Console.WriteLine("值类型,保存的是具体的值"); int x = 1; int y = x; y = y + x; Console.WriteLine("x:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,842,405
精华内容 2,336,962
热门标签
关键字:

值的类型有什么