use*_*545 4 java string object
以下代码将创建多少个字符串对象?
String s = "Mahendra" + "Singh" + "Dhoni";
Run Code Online (Sandbox Code Playgroud)
它会在字符串池中创建4个字符串对象还是会创建更多?请详细解释.
PS我见过其他例子,他们只处理2个字符串对象.
编辑:我从答案中看到,在上面的情况下,只会创建一个对象.非常感谢一些非常好的建议.很抱歉问一个愚蠢的问题,但是你可以在下面的例子中说明将创建多少个对象?
String s = "Mahendra";
s = s + "Singh" + "Dhoni";
Run Code Online (Sandbox Code Playgroud)
第二次编辑:再次抱歉,但我还有一些疑问.我在评论中看到,在上面的例子中,将创建3个对象"Mahendra","SinghDhoni"和"MahendraSinghDhoni".我怀疑不应该从左到右计算.我错过了什么 - 概念明智吗?请帮忙.
另外,在另一种情况下,如果我扭曲这个问题,对象的数量将如何变化.我正在详细询问这一点,以便为很多同事清除它.所有的帮助表示赞赏.
String s = "Singh";
s = "Mahendra" + s + "Dhoni";
Run Code Online (Sandbox Code Playgroud)
如果你的代码是:
public static void main(String[] args) {
String s = "Mahendra" + "Singh" + "Dhoni";
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
看一下字节码:
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=2, args_size=1
0: ldc #16 // String MahendraSinghDhoni --> This line
2: astore_1
3: getstatic #18 // Field java/lang/System.out:Ljav
/io/PrintStream;
6: aload_1
7: invokevirtual #24 // Method java/io/PrintStream.prin
ln:(Ljava/lang/String;)V
10: return
Run Code Online (Sandbox Code Playgroud)
如您所见,编译器在编译期间添加了所有三个字符串.所以会有只有一个串在字符串常量池中多数民众赞成.
编辑:根据编辑的问题:
"Singh" + "Dhoni"将在编译期间添加.所以总共会有3个String对象.
"Mahendra"并将"SinghDhoni"在String常量池上,然后
mahendraSinghDhoni将在堆上.
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |