值类型和引用类型
值类型:直接将内存存储在栈内,由系统自动释放资源的数据类型.与值类型相对应的有引用类型.C#语言中还对应指针类型
引用类型 由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。
下面是结构体(值类型)和类(引用类型的区别)
为什么对象是引用类型,为什么string是引用类型,底层原理是什么?
引用是一种别名,本质上是指向同一块地址,底层实现是通过指针。
c#与c++做联系,引用类型相当于指针变量,值类型相当于普通变量。
值类型是复制的,对象一般都会占据比较大的内存空间。所以采用引用类型,不然效率低。理论上来说,在语言设计的时候,采用值类型还是引用类型没有严格的意义,这样的划分主要是为了效率。 正是因为这样的考虑,虽然struct是值类型,但也不建议用值类型的方式进行传参。
string指向常量空间的地址,常量是不能直接被改变的,如果想改变字符串的值是不能通过直接修改字符串常量来达到修改字符串的目的,必须是开辟另一个常量空间存放新的字符常量。
(91条消息) 为什么string是引用类型_kenniszy的博客-CSDN博客_string为什么是引用类型
我认为底层原理就是值类型存储在栈上,栈空间小,对象比较大,字符串也一样,所以在栈上存地址,new之后再在堆上分配空间存内容。
那我们来看看
堆和栈的区别