值类型和引用类型概念梳理
一、值类型和引用类型:
a) 值类型:存储在堆栈中,包括 int、float、demical、bool、char类型
b) 引用类型:存储在托管堆上,包括object、string类型
i. 装箱boxing:值类型à object类型
1. int i = 100; object x = i; //隐式装箱
2. int i = 100; object x = object(i); //显示装箱
ii. 拆箱unboxing:object类型à值类型
1. int i = 100; object x = i; int j = (int)x; //显示,只可显示拆箱
iii. string 特殊性:
1. 把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用。但是修改其中一个字符串,会创建一个全新的string对象,而另一个字符串没有改变。
例:String s1 = “old string”; ß托管堆分配string对象, s1指向它
String s2 = s1; ß添加指向刚分配的string对象的引用s2, s2 = “old string”
s1 = “new string”; ß更改s1的值,实际托管堆新建一个string对象,让s1改为指向它,s2不变,保持原有指向, s2 = “old string”。