use*_*526 2 java garbage-collection
根据我所读到的,该程序唯一可能的输出是"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();
}
}
Run Code Online (Sandbox Code Playgroud)
字符串是不可变的.你的生产线this.str.concat(str2);几乎什么也没做,也许应该阅读str = this.str.concat(str2);,或者干脆str += str2?
但自从声明新的MyString("A").concat("B"); 正在创建一个新对象......
是.临时String("AB")在内部创建为返回值并被丢弃.
...用字符串"AB",这个对象也不能被垃圾收集,导致输出"AB"?
不,因为它创造了一个String,而不是一个MyString.字符串在终结器(或任何其他方法)中不打印任何内容.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |