为什么string是引用类型?int呢
追答int是基本类型,值类型。意味着每个变量分配一片内存,保存值。修改时,修改内存内容。
说string 是引用,是站在string 变量保存的是地址基础上理解的。但是java已经没有指针了。这都是套用c来理解的。
实际上string 是一个很特殊的类型。
你写的这个分明a和b只有值相同啊
追答是值相同,但是"a"指向的是同一个地址
追问难道不是两个不同的内存
怎么回事
追答String b = "this is a string"; //假设此处"this is a string"这个字符串在内存中的地址为 1,
//而b这个变量指向地址为 1的区域。
String a = b; //这里只是让a这个变量也指向的地址为 1的区域,并没有重新申请内存,因此是地址传递
其实关于这个问题你只要Debug一下,注意看一下每个变量的ID就能更清楚一些了。
如果是string a=new string;
a=b;这样呢
String a = new String(); //这个时候a指向了另一个地址,也就是新的new String()
a = b; //这时候又将b指向的地址赋给了a,所以a又指向 1了
那我有没有办法只赋值呢?如果地址相同,岂不是改了a后,b也会改?
追答不是,String是final的,一旦定义了就不会改变的。
所谓的改变只是你的错觉,只是变量指向的内存变了。
比如:
b = "asdf";
a = b;
b = "asdfasdf";
这个时候只是又重新开辟了一块内存用来保存“asdfasdf",并且将b指向了这块内存,而a还是指向原来的"asdf“的内存。