static String str0="0123456789"; static String str1="0123456789"; String str2=str1.substring(5); String str3=new String(str2); String str4=new String(str3.toCharArray()); str0=null; 假定str0,...,str4后序代码都是只读引用。 Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()
时间: 2024-02-12 21:06:52 浏览: 87
在 Java 7 中,Full GC 会清理无用的对象,包括被 str0 引用的对象。因此,str0 对象会被清理,但是 str1、str2、str3 和 str4 对象都是只读引用,不会被清理。
str1 和 str2 引用的是同一个字符串对象,该对象包含全部的字符,即 10 个数字字符。str3 通过构造函数创建了一个新的字符串对象,该对象也包含全部的字符。str4 通过字符数组构造函数创建了一个新的字符串对象,该对象也包含全部的字符。
由于字符串常量池中的字符串对象 "0123456789" 被 str1 引用,因此不会被回收。在发生一次 Full GC 后,Heap 空间保留的字符数为 10。
相关问题
阅读以下程序,写出程序运行结果。 public class Test { public static void main(String[] args) { String str1 = "百年追梦"; String str2 = "百年追梦"; String str3 = new String("百年追梦"); String str4 = new String("百年追梦"); String str5 = "胸怀千秋伟业,恰是百年风华!"; System.out.println(str1 == str2); System.out.println(str3 == str4); System.out.println(str3.equals(str4)); System.out.println(str5.length()); System.out.println(str5.substring(9,13)); System.out.println(str5.indexOf("伟业")); } }
程序运行结果如下:
```
true
false
true
13
千秋伟业
4
```
解释如下:
1. `str1 == str2`,比较的是字符串对象的引用,由于字符串常量池中只有一个"百年追梦"对象,因此str1和str2都指向同一个对象,结果为true。
2. `str3 == str4`,比较的是字符串对象的引用,由于使用new关键字创建了两个不同的字符串对象,因此str3和str4指向不同的对象,结果为false。
3. `str3.equals(str4)`,比较的是字符串对象的值,由于字符串内容相同,因此结果为true。
4. `str5.length()`,返回字符串的长度,结果为13。
5. `str5.substring(9,13)`,返回从下标9开始到下标13之前的子串,即"千秋伟业"。
6. `str5.indexOf("伟业")`,返回"伟业"在字符串中第一次出现的位置,即从下标9开始,结果为4。
public class Test { public static void main(String[] args) { String str1 = "百年追梦"; String str2 = "百年追梦"; String str3 = new String("百年追梦"); String str4 = new String("百年追梦"); String str5 = "胸怀千秋伟业,恰是百年风华!"; System.out.println(str1 == str2); System.out.println(str3 == str4); System.out.println(str3.equals(str4)); System.out.println(str5.length()); System.out.println(str5.substring(9,13)); System.out.println(str5.indexOf("伟业")); } }
这段代码是一个Java程序,它定义了一个名为Test的类,并在其中实现了一个main方法。这个程序主要演示了字符串的一些常用操作。
程序首先定义了5个字符串变量,分别是str1、str2、str3、str4和str5。其中,str1和str2直接使用字符串字面量赋值,而str3和str4使用了new关键字来创建字符串对象。str5则是一个比较长的字符串,包含了一句话。
接下来,程序使用了一些字符串方法来操作这些字符串。具体来说,它使用了==运算符来比较str1和str2、str3和str4是否指向同一个对象;使用了equals方法来比较str3和str4的内容是否相同;使用了length方法来获取str5的长度;使用了substring方法来获取str5中的一段子串;使用了indexOf方法来查找str5中是否包含指定的子串。
你可以将这段代码复制到一个名为Test.java的文件中,并在命令行中编译和运行它。运行后,你会看到输出结果,它会告诉你这些字符串的一些信息,比如它们是否相等、它们的长度是多少,以及它们中是否包含指定的子串。