【问题标题】:String objects is immutable; why I was able to change it? [duplicate]字符串对象是不可变的;为什么我能够改变它? [复制]
【发布时间】:2021-05-03 06:49:30
【问题描述】:

我知道 String 是不可变的,一旦创建它们就不能改变它们的值。 如果是这样,请指导我了解我的代码有什么“错误”,因为显然我能够更改初始字符串的值。 提前致谢

package ocajp;

public class TStatic1 {
    
    static String s1 = "Ann";
    static void change() {  s1 += " has apples";}
    
    public static void main(String[] args) {
        change();
        System.out.println("s1: " + s1);
    }
}

s1:安有苹果

【问题讨论】:

  • 您正在创建一个新的 String 对象并将其分配给引用 s1。

标签: java


【解决方案1】:

您需要区分对象和引用:String 类型的对象是不可变的。但是,变量 s1 是对 String 类型对象的引用

您的代码所做的是通过串联创建一个新字符串,然后修改引用s1 以引用这个新创建的字符串。

【讨论】:

  • 你是对的@Konrad Rudolf,这个新的证实了这一点。谢谢包ocajp;公共类 TStatic1 { 静态字符串 s1 = 新字符串(“安”);静态字符串更改(字符串输入){输入+=“有苹果”;返回输入; } public static void main(String[] args) { change(s1); System.out.println("s1:" + s1); } } //brings: //s1: Ann
【解决方案2】:

您实际上为 s1 变量创建了新对象,就像您创建了 String newString = s1 + " has apples" 一样。

原来的s1变量被这个新创建的String对象引用了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多