任何人都可以从这个链接http://www.javatpoint.com/corejava-interview-questions-3解释问题87和89
87)以下代码中将创建多少个对象?
String s1 = "string1";
String s2 = "string1";
String s3 = "string1";
Run Code Online (Sandbox Code Playgroud)
答案是:只有一个对象
89)以下代码中将创建多少个对象?
String s = new String("Welcome");
Run Code Online (Sandbox Code Playgroud)
答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中.
虽然String是一个用Java编写的类,但它是一种与JVM有一些特殊关系的特殊类.其中一个是字符串文字(用引号括起来的字符序列).当JVM看到"abc"它执行如下操作时:
String obj = stringLiteralsCache.get("abc");
if (obj == null) {
obj = new String("abc");
stringLiteralsCache.put("abc", obj);
}
Run Code Online (Sandbox Code Playgroud)
因此,在第一个示例中,第一行导致创建新实例,但接下来的两行只是从缓存中获取已创建的实例.
但缓存仅适用于文字.当您显式调用构造函数时,它无法阻止创建新实例.因此,new String("Welcome")创建了两个对象:一个来自文字,Welcome因为它不在缓存中,第二个来自显式调用String构造函数.
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |