C#中的数据类型区别

以下有两个题目,哪个是正确的?哪个是错误的?为什么?
一、
Point p1 = new Point(18,20); //Point是struct
Point p2 = p1;
如果置 p1.x=35;
则 p2.x也是35
二、

Person p1 = new Person(18); //Person是引用类型

Person p2 = p1;

如果 p1.age=35;

则 p2.age也是35

第二题正确:
Person p1 = new Person(18); 
//Point p1创建了一个Point类的对象引用p1(对象引用就像c语言的指针), 该引用p1指向堆中一个地址、该地址存放着new Person(18);所创建的Person类对象

Person= p1;//引用p2所指向的堆中地址 与 p1指向的一样。
所以【如果 p1.age=35; 则 p2.age也是35】成立,第二 是正确的

第一题是错的。
int、char、decimal、bool、enum、struct 等是 值类型。
值类型在内存中是这个值直接存在 栈 里。
Point p1 = new Point(18,20); //直接在栈里开辟一块空间存放p1的值
Point p2 = p1;//栈里开辟一块空间存放p2的值,p2的值与p1相等。
p1.x=35;//对p1重新赋值,p1空间里存放的值也就改变了。
但是我们没对p2重新赋值,所以p2空间里的值没变。
p1、p2的值当然就不相等了

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-01-17
1错2对吧。

struct是值类型,类是引用类型。追问

为什么“struct是值类型,类是引用类型。”就得出这样的结果,能不能解释详细一点呢??

追答

c#中数据类型分值类型和引用类型的,类似int,double,struct都是值类型,值类型是存储在栈中的,比如int a=10,int b=a; 那么这是什么意思,这就是在栈中开辟了一块存储空间,咱们叫它a,里边存的10,b=a,这句话就是又重新开辟了一块存储空间,里边存的也是10,所以a,b虽然值相同,但是存储空间不同,改变a的话,b不会改变,同理改变b,a也不会变,就好比你写int a=10;int b=a; b=20; 难道a也变成20了?? 那是不可能的。

引用类型和值类型不同,引用类型,比如类Person p=new Person(); 这个怎么存储,其实这个p的具体内容存储在堆中,比如p.age,p.name等,而p这个索引其实在栈中,那你为什么通过p就能拿到p.name,p.age等,是因为p这个索引在栈中存储的是一个地址,是指向堆中的。

打个比方吧,引用类型是这样的,你去找一个人,我可以直接给给你说那就是,你看见了,就很类似与值类型,而引用类型,你找一个人,我给你一张卡片,上边写着门牌号709,你拿着这个找到709就找到他了。

所以说
Person p1 = new Person(18); //Person是引用类型

Person p2 = p1;

如果 p1.age=35;

则 p2.age也是35

这样的代码通俗一点讲,p1是那个门牌号,p1把自己门牌号给了p2一份,那么p1,p2指向的是一个房间,那么p1.age,改的就是p1所对应的那个房间的内容把,但是p1,p2指向的是一个房间,p1.name改变注定p2.name也改了。

c#中数据类型分值类型和引用类型的,类似int,double,struct都是值类型,值类型是存储在栈中的,比如int a=10,int b=a; 那么这是什么意思,这就是在栈中开辟了一块存储空间,咱们叫它a,里边存的10,b=a,这句话就是又重新开辟了一块存储空间,里边存的也是10,所以a,b虽然值相同,但是存储空间不同,改变a的话,b不会改变,同理改变b,a也不会变,就好比你写int a=10;int b=a; b=20; 难道a也变成20了?? 那是不可能的。

引用类型和值类型不同,引用类型,比如类Person p=new Person(); 这个怎么存储,其实这个p的具体内容存储在堆中,比如p.age,p.name等,而p这个索引其实在栈中,那你为什么通过p就能拿到p.name,p.age等,是因为p这个索引在栈中存储的是一个地址,是指向堆中的。

打个比方吧,引用类型是这样的,你去找一个人,我可以直接给给你说那就是,你看见了,就很类似与值类型,而引用类型,你找一个人,我给你一张卡片,上边写着门牌号709,你拿着这个找到709就找到他了。

所以说
Person p1 = new Person(18); //Person是引用类型

Person p2 = p1;

如果 p1.age=35;

则 p2.age也是35

这样的代码通俗一点讲,p1是那个门牌号,p1把自己门牌号给了p2一份,那么p1,p2指向的是一个房间,那么p1.age,改的就是p1所对应的那个房间的内容把,但是p1,p2指向的是一个房间,p1.name改变注定p2.name也改了。

本回答被提问者采纳
第2个回答  2015-01-17

二是正确的。但是以后遇到这种事情,最好是直接写一遍例子,加深印象。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Point p1 = new Point(18, 20); //Point是struct
            Point p2 = p1;
            p1.x=35;
            Console.WriteLine("P1.x={0} P1.y={1}", p1.x, p1.y);
            Console.WriteLine("P2.x={0} P2.y={1}", p2.x, p2.y);

            Person person1 = new Person(18); //Person是引用类型
            Person person2 = person1;
            person1.age=35;
            Console.WriteLine("person1.age={0}", person1.age);
            Console.WriteLine("person2.age={0}", person2.age);

            Console.ReadKey();
        }
    }
    public struct Point
    {
        public int x, y;

        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    public class Person
    {
        public int age;
        public Person(int age)
        {
            this.age=age;
        }
    }
}

C#值类型和引用类型的区别
(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。(2)引用类型:对象、数组、函数。1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char2、引用类型:包括:对...

c#中什么是值类型什么是引用类型
值类型和引用类型:值类型的变量直接包含他们的数据,而引用类型的变量存储 引用类型存储对他们的数据的引用,后者称为对象:简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2***、值类型:简单类型、枚举、结构 引用类型: 类类型、接口类型、数组类型和委托类型 3*...

C#中数据类型有哪些?
C#语言中数据类型主要分为两大类:值类型和引用类型,其中值类型包含整数、浮点数、高精度浮点数、布尔、字符、结构和枚举,而引用类型则包括对象(Object)、字符串、类、接口、委托以及数组。具体来说,整数类型包括了整数、长整数、长长整数和无符号整数等;浮点数类型包括单精度浮点数和双精度浮点数;...

说明C#中值类型与引用类型的区别。
在C#中有两种类型的数据,一种是值类型数据,一种是引用类型数据。在编码的时候区分这两种类型数据,可以避免一些细小的编码错误。首先说说什么类型是值类型,例如:int、float、bool之类的基础类型,以及用struct定义的类型,如:DateTime。除此外,如string,数组,以及用class定义的类型等都是引用类型。对...

c#的数据类型有哪些
C# 中有两种类型:值类型 (value type) 和引用类型 (reference type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己的...

C#有几种数据类型 他们的作用
类(class)是一组具有相同数据结构和相同操作的对象集合。接口(interface)应用程序之间要相互调用,就必须事先达成一个协议,被调用的一方在协议中对自己所能提供的服务进行描述。在C#中,这个协议就是接口。委托(delegate)用于封装某个方法的调用过程。数组(array)主要用于同一数据类型的数据进行批量...

c#中值类型和引用类型的区别
1、速度上的区别 值类型存取速度快,引用类型存取速度慢。2、用途上的区别 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。3、来源上的区别 值类型继承自System.ValueType,引用类型继承自System.Object 4、位置上的区别 值类型的数据存储在内存的栈中,引用类型的数据存储在内存...

C#中的数据类型区别
值类型在内存中是这个值直接存在 栈 里。Point p1 = new Point(18,20); \/\/直接在栈里开辟一块空间存放p1的值Point p2 = p1;\/\/栈里开辟一块空间存放p2的值,p2的值与p1相等。p1.x=35;\/\/对p1重新赋值,p1空间里存放的值也就改变了。但是我们没对p2重新赋值,所以p2空间里的值没变。p1、...

c#的数据类型
基本数据类型:C#拥有比C\/C++或者Java更广泛的数据类型.这些类型是bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一样,所有这些类型都有一个固定的大小.又像C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个...

C#中有哪些常用的数据类型
float类型:32位浮点数,取值范围在 double类型:64位浮点数,取值范围在 布尔型 bool true false 结构型 struct 如 public struct Point { int x;int y;string s;} 结构和类的区别:结构是一个值类型(在栈上),而类是一个引用 类型(在堆上)。枚举型 enum类型 常用形式有:enum days {...

相似回答