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

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网