java中String字符串常见问题

1.

String str="abc";
Stirng str1="abc";

上述代码生成了多少个对象呢?

答案:只生成了一个。

原因:在java虚拟机中有一个字符串池。在上述代码中,执行第一行代码时,java虚拟机在字符串池中寻找是否有“abc”这个字符串对象,当发现没有时便会生成一个“abc”的对象,然后便将该对象的首地址赋值给str(也就是说变量str是引用,引用即"abc"对象的昵称,就像用洋洋代表熊猫1,即洋洋是熊猫1的引用)。

2.

String a=new String("abc");
String b=new String("abc");
System.out.println(a==b);

 上述代码生成了多少个对象呢?

答案:生成了三个

原因 :执行第一行代码时,由于字符串池中没有“abc”对象,所以就在字符串池中创建一个"abc"对象,然后再在堆里分配空间创建一个String对象,然后将该对象地址赋值给a。第二行代码中,可以从线程池中找到"abc"对象,然后只需在堆里寻找空闲空间分配空间创建一个String对象,然后将该对象地址赋值给b。(所以第一个对象或第二个对象的地址不同。),所以a==b输出的是false。

3

String s="ab"+"cd";

上述代码中生成了多少个对象呢?

答案:(经过编译时期的优化)生成了一个。

原因:在编译时期会进行优化,所以只会字符串池中生成一个“abcd”对象。

猜你喜欢

转载自blog.csdn.net/qq_37922750/article/details/81875165