gpt4 book ai didi

java - 为什么 "A"或无输出只是此代码的可能输出,它也可能是 "AB"?

转载 作者:行者123 更新时间:2023-12-05 00:49:15 25 4
gpt4 key购买 nike

根据我的阅读,该程序唯一可能的输出是"A" 或无打印输出。但是由于语句 new MyString("A").concat("B"); 正在创建一个带有字符串 "AB" 的新对象,所以这个对象也不能被垃圾收集导致输出 "AB"?

class MyString { 

private String str;
MyString(String str) { this.str = str; }
public void finalize() throws Throwable {
System.out.print(str);
super.finalize();
}
public void concat(String str2) {
this.str.concat(str2);
}
public static void main(String[] args) {
new MyString("A").concat("B");
System.gc();
}
}

最佳答案

字符串是不可变的。您的行 this.str.concat(str2); 实际上什么也没做,也许应该阅读 str = this.str.concat(str2);,或者只是 str += str2?

But since the statement new MyString("A").concat("B"); is creating a new object...

是的。临时 String ("AB") 在内部创建为返回值并被丢弃。

...with string "AB", couldn't this object also be garbage collected resulting in output "AB" ?

不,因为它创建了一个 String,而不是 MyString字符串在其终结器(或与此相关的任何其他方法)中不打印任何内容。

关于java - 为什么 "A"或无输出只是此代码的可能输出,它也可能是 "AB"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com