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

java字符串变量赋值例如Stringa="abc";Stringb;b=a;b="abcd";为什么输出a时还是abc??令b=a;不是令b与a同时管理abc这个字符串... java 字符串变量赋值例如
String a="abc";
String b;
b=a;
b="abcd";
为什么输出a时还是abc??令b=a;不是令b与a同时管理abc这个字符串吗??刚学,求大神解答
展开
 我来答
貌似風輕
2018-01-27 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:696万
展开全部
String a = "abc";  // 定义了一个 "abc" 字符串 ,a 指向 这个字符串
String b;
b = a;             // 使b也指向 a现在指向的那个字符串("abc")
b = "abcd";        // 定义了一个"abcd" 字符串,b 指向 这个新的字符串

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

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

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

Java中字符串内存位置浅析

触摸java常量池

尚学堂科技有限公司
2018-01-27 · 百度知道合伙人官方认证企业
尚学堂科技有限公司
北京尚学堂科技有限公司是一家从事JAVA、大数据、web前端、网络在线教育、互联网架构师、Android、ios技术开发、咨询为一体的软件公司。公司由海外留学人员和国内IT人士创建。
向TA提问
展开全部

关于字符串需要理解以下两点:

  1. 字符串是常量,它们的值在创建之后不能更改(final),可以共享。

  2. 当常量池中存在常量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);
    }
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式