刚学完c#,今天老师讲JAVA,都把我搞迷了。
static void Main(string[] args)
{
string str = "123";
string str1 = str;
str1 = "321";
Console.WriteLine(str);
}
在C#中str和str1不是都指向的一个值?改变其中一个变量不是就都改变了,最后不是应该是321?
可是为什么输出123?
static void Main(string[] args)
{
string str = "123";
string str1 = str;
str1 = "321";
Console.WriteLine(str);
}
在C#中str和str1不是都指向的一个值?改变其中一个变量不是就都改变了,最后不是应该是321?
可是为什么输出123?
str1=str的意思,是将str1和str指向同一个内存位置,但str1和str还是互相独立的,
所以,再给str1赋值,只是改变了str1的对象指向,str是不受影响的。
非基本类型应该就不是了把。。
建议lz自己编写两个类试试测试下。
测试下自己类之间的引用。
在这里str指向对象"123"
string str1 = str;这句代码的意思是,把str的地址给str1,此时,同时是str和str1指向对象"123".
然后str1 = "321";你这里改变的是str1的地址,让str1指向"321",而str还是指向"123"的,所以输出是"123".
明白了吗.? 自己画个图试试而且告诉LZ一点string是不可变的. 就算你调用了string类的一些方法,如果不再重新赋值的话,对象是不会改变的..Java和C#都是.Java里面有个StringBuffer是可变的 LZ可以去参阅下API
那为什么老师给我讲的是:
string a = "123" string b = a; b = "321";
栈 堆
a EF0022 EF0022 321
b EF0022