java 字符串变量赋值例如 String a="abc"; String b; b=a; b="

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 指向 这个新的字符串

在内存中大致的示意图如下:

所以最后 a =“abc”,b=“abcd”

java中字符串是一个较为特殊的存在,如果感兴趣可以找资料详细了解

Java中字符串内存位置浅析

触摸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);
    }
}

本回答被提问者采纳
相似回答