java 字符串变量赋值例如
String a="abc";
String b;
b=a;
b="abcd";
为什么输出a时还是abc??令b=a;不是令b与a同时管理abc这个字符串吗??刚学,求大神解答
String a = "abc"; // 定义了一个 "abc" 字符串 ,a 指向 这个字符串
String b;
b = a; // 使b也指向 a现在指向的那个字符串("abc")
b = "abcd"; // 定义了一个"abcd" 字符串,b 指向 这个新的字符串
String b;
b = a; // 使b也指向 a现在指向的那个字符串("abc")
b = "abcd"; // 定义了一个"abcd" 字符串,b 指向 这个新的字符串
在内存中大致的示意图如下:
所以最后 a =“abc”,b=“abcd”
java中字符串是一个较为特殊的存在,如果感兴趣可以找资料详细了解
温馨提示:答案为网友推荐,仅供参考
第1个回答 2018-01-27
关于需要理解以下两点:
字符串是,它们的值在创建之后不能更改(final),可以共享。
当常量池中存在常量abc时,当声明String b="abc";的时候首先会去检查常量池中是否已经存在常量abc,如果存在就不会再去分配一个abc,而是直接将已有对象abc的地址赋值给栈中的b(此过程是的化)。
此题解释在注释中:
public class Test {public static void main(String[] args) {
// 栈中变量a指向字符串常量池中的"abc"
String a = "abc";
// 声明一个变量b
String b;
// 把a的地址赋给b,此时变量a和b同时指向字符串常量池中的"abc"
b = a;
// 把字符串常量池中的"abcd"的地址重新赋值给b,此时的b指向字符串常量池中的"abcd",而不是指向常量"abc"
b = "abcd";
System.out.println(a);
System.out.println(b);
}
}本回答被提问者采纳