来考察一下大家String基础知识

    public static void main(String[] args) {
        String a="aaa";
        String b=a;
        a = "3333";
        System.out.println(b);
    }

大家先猜一下出处的结果是"aaa"还是"3333"?

执行一下会发现结果为:

aaa

解释一下:
在这段Java代码中,首先创建了一个字符串变量 a 并赋值为 “aaa”,然后将变量 b 赋值为 a,接着将变量 a 重新赋值为 “3333”。最后,打印变量 b 的值。

由于字符串是不可变的,在Java中对字符串进行操作时,实际上是创建了一个新的字符串对象。因此,尽管在赋值给 b 之后 a 的值发生了变化,但 b 仍然引用原始的字符串 “aaa”。

因此,这段代码的输出结果将是:

aaa

从Java内存模型的角度来解释这段代码,可以分析如下:

  1. 首先,创建了一个字符串对象 “aaa” 并将变量 a 指向该对象。

  2. 然后,将变量 b 指向了与 a 相同的字符串对象 “aaa”。此时,ab 都指向同一个字符串对象。

  3. 接着,将变量 a 重新赋值为 “3333”。由于字符串是不可变的,这实际上是创建了一个新的字符串对象 “3333”,并将 a 指向了这个新对象。但是,b 仍然指向原始的字符串对象 “aaa”。

  4. 最后,打印变量 b。由于 b 仍然指向 “aaa”,所以输出结果为 “aaa”。

在这个过程中,关键点在于字符串的不可变性以及变量 ab 在不同时间指向了不同的字符串对象。这与Java内存模型中的字符串池和引用的概念相关。

你可能感兴趣的:(java,开发语言,java)