值类型与引用类型的区别是什么?

2023-07-26 11:39发布

(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。(2)引用类型:对象、数组、函数。1、值类型:包括:sbyte
1条回答
1楼 · 2023-07-26 11:49.采纳回答
(1)值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。
(2)引用类型:对象、数组、函数。
1、值类型:包括:sbyte、short、int、long、float、double、decimal(以上值类型有符号)byte、ushort、uint、ulong(以上值类型无符号)bool、char
2、引用类型:包括:对象类型、动态类型、字符串类型。二、具体区别:
1、值类型:byteb1=1;byteb2=b1;Console.WriteLine("{0},{1}。",b1,b2);b2=
2;Console.WriteLine("{0},{1}。",b1,b2);Console.ReadKey();解释:byteb1=1;声明b1时,在栈内开辟一个内存空间保存b1的值1。byteb2=b1;声明b2时,在栈内开辟一个内存空间保存b1赋给b2的值1。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,1。b2=2;将b2在栈中保存的值1改为
2。Console.WriteLine("{0},{1}。",b1,b2);输出结果为1,2。
2、引用类型:复制代码。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Person
{
public int Blood = 10;
}

class Program
{
public static void Add(int x)
{
x += 10;
Console.WriteLine("值类型当参数被传递并修改之后:"+x);
}

public static void Add(Person person)
{
person.Blood += 10;
Console.WriteLine("引用类型当参数被传递并修改之后:" + person.Blood);
}

static void Main(string[] args)
{
//值类型变量
int i = 10;

Console.WriteLine("i的原值:" + i);
Add(i);
Console.WriteLine("但是i的值并没有因为函数的修改而修改:" + i);

//引用类型变量
Person person = new Person();

Console.WriteLine("Blood的原值:" + person.Blood);
Add(person);
Console.WriteLine("但是Blood的值因为函数的修改而修改:" + person.Blood);

//值类型和引用类型的区别,就在于当函数参数传递的时候.
//值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的
//而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.
//这就是传值和传址的区别

Console.ReadLine();
}
}
}

一周热门 更多>