精华内容
下载资源
问答
  • 值类型 和引用类型

    2017-09-03 17:11:25
    C#里面把数据类型分为两大类,分别为值类型和引用类型。C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。 C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串...

    C#里面把数据类型分为两大类,分别为值类型和引用类型。

    C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
    C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串string
    string运算看起来像值类型其实是运算符重载的结果。

    数据类型

    关于值类型和引用类型的内存部署:
    规律是:

    • 引用类型部署在托管堆上;
    • 值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。

    简单地说“值类型存储在栈上,引用类型存储在托管堆上”是不对的。必须具体情况具体分析。

    1. int a[10]  
    数组根据定义为引用类型在堆上
    但数组元素虽为 int 类型但是却不在栈上而是在堆上
    2. 类型嵌套
    具体问题具体分析
    

    适用场合:
    (1) 值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
    (2) 引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封(seal)的;
    (3) 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型,如 int? a = null; );
    (4) 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
    参考:http://blog.csdn.net/qiaoquan3/article/details/51202926

    下面说法错误的是:
    (1) struct声明的类型是值类型 (√)
    (2) 值类型是在堆上分配的 (x)
    (3) 值类型不会被垃圾回收 (√)
    (4) 值类型不需要指针来引用 (√)
    (5) 引用类型在堆上分配,值类型在栈上分配 (√)

    粗略地说:(5)可以认为正确。

    展开全文
  • 值类型和引用类型

    2016-07-02 22:28:32
    值类型和引用类型值类型 值类型是直接分配在栈上的空间,这个空间对应着值类型变量的值。 引用类型 引用类型是分配在堆上的空间,这个空间对应着引用类型的内存分配地址。 在别人的博客里看到一句话形容是“值类型...

    值类型和引用类型

    值类型

    值类型是直接分配在栈上的空间,这个空间对应着值类型变量的值。

    引用类型

    引用类型是分配在堆上的空间,这个空间对应着引用类型的内存分配地址。

    在别人的博客里看到一句话形容是“值类型是现金,引用类型是存折”。觉得没什么毛病,使用值类型修改它的值,是直接对这个变量操作的,而使用引用类型,则是先取到它在内存中分配的地址指向的值。

    public class Person
    {
        public string name;
        public int age;
    }
    
    class Main
    {
        static void main()
        {
            Person jerry = new Person
            {
                name = "jerry";
                age = 18;
            };
    
            Person tom = new Person
            {
                name = "tom";
                age = 20;
            }
    
            int age = jerry.age;
            jerry.age = 19;
    
            Person shawn = tom;
            tom.name = "TOOOOM";
    
            Console.WriteLine("age:{0}", age);
            Console.WriteLine("jerry.age:{0}", jerry.age);
            Console.WriteLine("shawn.name:{0}", shawn.name);
            Console.WriteLine("tom.name:{0}", tom.name);
        }
    }
    age:18
    jerry.age:19
    shawn.name:TOOOOM
    tom.name:TOOOOM

    age的值并没有随着jerry.age的值变化而变化,但是shawn.name却因为tom.name的变化而改变了。因为class是引用类型,它们指向的是内存中的同一个地址,在tom修改了name的值之后,shawn再访问这片内存地址,得到的值也是修改后的。

    在声明age的时候,便在栈上开辟了一片空间,然后把jerry.age的值填了进去。但是在声明shawn的时候,是在堆上开辟了一片空间,然后tom是一个引用类型,然后把tom的引用传递给了shawn,所以在修改了tom.name之后,shawn.name也跟着改变。

    在性能上,值类型是直接操作内存的处理,而引用类型则多了一个内存地址的解析,很多时候值类型会减少系统性能的开销,但是也有例外,在进行大量的函数变量的传递和返回时,频繁的字段拷贝,也是反而会降低系统性能的。如果字段被频繁的用户HashTable或者ArrayList,这些类会对其中的值类型进行装箱操作,也会导致而外的内存分配和内存拷贝,对性能也是有影响的。

    展开全文
  • C#和Java中对象分为值类型和引用类型,不同类型的对象存储方式不同,如果想要深入了解程序首先要分清楚:哪些是值类型?哪些是引用类?

    C#和Java中对象分为值类型和引用类型,不同类型的对象存储方式不同,如果想要深入了解程序首先要分清楚:哪些是值类型?哪些是引用类?

    C#中值类型和引用类型

    这里写图片描述
    区别:
    1、值类型分配在栈上,它的变量直接存储变量的对象。
    2、引用类型分配在栈上,它的变量通常存储一个指向对象的指针,变量通过该指针来引用对象,对象存储在托管堆中。
    3、值类型继承自ValueType(注意:System.Value又继承自System.Object);引用类型继承自System.Object。
    4、值类型变量存储其实例数据,因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量存储其数据在托管堆中的地址,因此以引用方式进行参数传递会影响到参数本身,因为两个变量引用了内存中的同一块地址。
    5、值类型有装箱和拆箱两种表示,运行库提供了所有值类型的已装箱形式;而引用类型只有装箱形式。
    6、值类型的内存不由GC控制,作用域结束时值类型会自动释放,减少了托管堆的压力,因此具有性能上的优势。例如:通常struct比class更高效;引用类型的内存回收由GC来完成。
    7、值类型是密封的(sealed),不能作为其他任何类型的基类,但是可以单继承或多继承接口;而引用类型一般都有继承性。
    8、值类型不具有多态性;而引用类型具有多态性。
    9、值类型变量不可为null值,值类型变量都会自动初始化为0值;而引用类型变量默认情况下创建为null值,表示没有存储任何指向托管堆的引用地址。对值为null的引用类型对象做任何操作,都会抛出NullReferenceException异常。
    值类型默认值截图:
    这里写图片描述
    引用类型默认值截图:
    这里写图片描述

    Java中值类型和引用类型

    Java中值类型只有八种,没看错只有八种:byte、short、int、long、float、double、char、boolean,其余的全部都是引用类型。

    展开全文
  • C# 值类型和引用类型

    2016-03-31 10:32:47
    值类型和引用类型

    从概念上看,值类型和应用的区别是:

     值类型直接存储值,存储在堆栈中,超出作用域后系统自动释放内存,初始化后才能使用。以下类型属于值类型:

    1、 整型(sbyte, byte, short, ushort, int, uint, long, ulong);

    2、 字符型(char);

    3、 浮点型(float, double);

    4、 decimal类型;

    5、 bool类型;

    6、 结构类型(struct);

    7、 枚举(enum);

    引用类型存储对值的引用,存储在托管堆中,通过垃圾回收机制进行回收,初始化时默认为null。以下类型属于引用类型

    1、 类;

    2、 接口;

    3、 委托;

    4、 数组;

    5、 内置object;

    6、 内置string;

     

    基本类型(如int、bool)为值类型,包含许多较大类型(通常在有类的情况下)为引用类型,C#设计这种方式的原因是可以得到最佳性能。如果要把自己的类型定义为值类型,应该把它声明为一个结构。

     

    //值类型,下面的语句会在内存的两个地方存储值20

    int i = 20;

    int j = i;

     

    //引用类型,代码假定已经定义了个类Vector,Vector是一个引用,他有一个int类型的成员变量Value:

    Vector x, y;

    x = new Vector();

    v.Value = 30;

    y = x;

    Console.WriteLine(y.Value);

    y.Value = 50;

    Console.WriteLine(x.Value);

     

    输出:

    30

    50

    在执行这段代码后,只有一个Vector对象。x和y都指向包含对象的内存位置。因为x和y是引用类型的变量,声明这两个变量只保留了一个引用——而不会实例化给定类型的对象。两种情况下都不会真正创建对象。要创建对象,就必须使用new关键字。因为x和y引用同一对象,所以对x的修改会影响y,反之亦然。string类型属于引用类型,但对string的操作与此不同,详见:string类型(引用类型)

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

    千次阅读 2021-01-08 16:48:39
    js值类型和引用类型 在ES6中js的数据类型分为两种,分别是值类型和引用类型。 常见的值类型:undefined,Boolean,number,String,symbol; 常见的引用类型:Object,Array,null(特殊的引用类型,指针指向空地址...
  • 值类型和引用类型 值类型和引用类型的说明 值类型: 基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct 引用类型: 指针、slice 切片、map、管道 chan、interface 等都是引用...
  • 值类型和引用类型
  • Golang学习之路—值类型和引用类型

    千次阅读 2021-02-21 18:22:01
    值类型和引用类型值类型和引用类型说明值类型和引用类型特点值类型引用类型栈区和堆区示意图 值类型和引用类型说明 值类型:基本数据类型int系列,float系列,bool,string,数组和结构体struct。 引用类型:指针、...
  • js值类型和引用类型

    2017-05-12 11:26:10
    js 值类型和引用类型 JavaScript值类型和引用类型有哪些  (1)值类型:数值、布尔值、null、undefined。  (2)引用类型:对象、数组、函数。  四、如何理解值类型和引用类型及举例  我们...
  • C#值类型和引用类型

    2018-03-26 20:16:14
    值类型和引用类型1、简单比较 值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。 值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 ...
  • 1.值类型和引用类型 package main import ( "fmt" ) func add(num int) { num += 1 } func addArry(arry [3]int){ arry[0] = 10 } func addSlice(slice []int){ slice[0] = 10 } func addMap(m map[int]int...
  • c#中的值类型和引用类型

    千次阅读 2019-02-03 15:43:04
    c#中的值类型和引用类型前言典型类型典型值类型典型引用类型基类值类型基类引用类型基类在内存中的表现值类型 前言 值类型和引用类型,是c#比较基础,但是也必须掌握的知识点,但是也不是那么轻易就能掌握,今天让...
  • unity中的值类型和引用类型

    千次阅读 2019-08-14 16:32:53
    一、值类型和引用类型概念 值(value)类型 :Unity中的vector3、quaternion是structs,它们是值。 引用(feference)类型 :Unity中的transform、gameobject是类类型,所以它们是引用。引用类型是对数据存储位置...
  • C#将数据类型分为两种:值类型和引用类型。 这两种类型存储在内存的不同的地方:值类型存储在堆栈(Stack)中,而引用类型则存储在托管堆(managed)上。区分类型是值类型还是引用类型非常重要,这会造成不同的结果。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,443
精华内容 13,777
关键字:

值类型和引用类型