首页 > 试题广场 >

String s = new St...

[单选题]
String s = new String("xyz");创建了几个StringObject?
  • 两个或一个都有可能
  • 两个
  • 一个
  • 三个
1.String对象的两种创建方式:
第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),
第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 字符串对象)。
System.out.println(str1==str2);//false

2.String类型的常量池比较特殊。它的主要使用方法有两种:
直接使用双引号声明出来的String对象会直接存储在常量池中。
如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。
String s1 = new String("AAA");
String s2 = s1.intern();
String s3 = "AAA";
System.out.println(s2);//AAA
System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,
System.out.println(s2 == s3);//true, s2,s3指向常量池中的”AAA“
编辑于 2020-01-16 15:39:40 回复(19)
如果常量池中存在“xyz”就只会创建一个对象,如果没有就会创建两个!
发表于 2019-08-16 00:53:35 回复(13)

三短一长选最长,

三长一短选最短。

发表于 2019-08-15 23:20:05 回复(8)

如果在常量池中已经存在“xyz”,那么不会继续创建,只创建一个new String("xyz")的对象。如果常量池中没有,则会创建两个对象,一个是对象的值“xyz”,一个是new String("xyz")的对象。


发表于 2019-08-20 20:06:57 回复(1)
通过new实例的方法创建字符串时,我们都知道会在堆上创建对象。我们也知道还有字符串常量池这个东西,但是很多人不知道的是你在new字符串时jvm会去检查常量池是否存在这个对象。如果存在,它只会在堆上创建一个对象。如果不存在,它会在常量池和堆上同时都创建一个对象,也就是两个对象。
发表于 2021-12-20 20:56:26 回复(1)
这道题含糊其辞,典型的流氓题。反正答案怎么说怎么有理。它要说是“2个”,它也是有道理的。就像现在的女生讨论男生时,男生永远处在陷阱当中,不是被评为渣男就是直男。
SB题目。
发表于 2021-06-09 17:13:52 回复(2)
String s = new String("xyz");

s 只是一个对象引用,并不是一个对象,可以理解为一个指针,实际上也就只创建了堆上上一个内存和常量池里的一个对象(也有可能不创建)
即 2 或 1
发表于 2022-03-09 16:30:41 回复(0)
<p>(1)创建对象,首先会常量池中查找常量"xyz"</p><p>(2)若常量池中有该常量,则直接引用该常量,创建一个对象:String s = new String ("xyz");</p><p>(3)若没有,则先在常量池中创建常量对象:String xyz ="xyz";</p><p> 然后再在堆中创建String s = new String ("xyz"); 该过程会创建两个对象</p><p><br></p><p><br></p>
发表于 2020-05-24 10:07:53 回复(0)

** 这题太阴了


发表于 2020-03-30 19:03:22 回复(1)
1.String对象的两种创建方式: 第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象), 第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 字符串对象)。 System.out.println(str1==str2);//false 2.String类型的常量池比较特殊。它的主要使用方法有两种: 直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。 String s1 = new String("AAA"); String s2 = s1.intern(); String s3 = "AAA"; System.out.println(s2);//AAA System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象, System.out.println(s2 == s3);//true, s2,s3指向常量池中的”AAA“
发表于 2022-03-30 16:08:20 回复(0)
如果在字符串池子里不存在“xyz”,就创建一个字符串常量“xyz”,并将其添加到字符串池子里;如果存在,则不创建,然后new String()会在堆中创建一个新对象。
发表于 2021-07-14 19:02:36 回复(0)
如果在常量池中已经存在“xyz”,那么不会继续创建,只创建一个new String("xyz")的对象。如果常量池中没有,则会创建两个对象,一个是对象的值“xyz”,一个是new String("xyz")的对象s。
发表于 2019-09-11 18:29:21 回复(0)
如果常量池中存在有“xyz”,则只会创建一个对象,若常量池中没有,则会创建两个
发表于 2022-09-24 13:56:39 回复(0)
[cp]以前我是堆,你是栈 你总是能精准的找到我,给我指明出路 后来有一天我明白了 我变成了栈,你却隐身堆海 我却找不到你了,空指针了 我不愿意如此,在下一轮full gc前 我找到了object家的finalize 又找到了你,这次我不会放手 在世界重启前,一边躲着full gc一边老去[/cp]
发表于 2022-03-18 11:45:32 回复(0)
String对象创建有两种方式
第一种是在常量池中获取对象,仅仅在编译期间在常量池中创建一个字符串对象
第二种是创建两个字符串对象,一个在堆中,一个在常量池中。
发表于 2022-02-19 16:01:14 回复(0)
如果常量池中存在xyz 则创建一个,如果不存在xyz 则创建2个
发表于 2021-10-15 16:43:00 回复(0)
只要有new,就是在堆中创建对象。但是string为了防止重复创建,会有串池,如果串池中没有,也需要在串池中创建一个对象。 以后不用new的创建字符串直接从串池里引用就行。
发表于 2021-09-11 12:34:35 回复(0)
常量池中若己经存在xy2,就在堆中创建一个,否则在常量池和堆中分别创建一个
发表于 2021-06-26 09:38:13 回复(0)
常量池中若己经存在xy2,就在堆中创建一个,否则在常量池和堆中分别创建一个
发表于 2021-06-26 09:38:13 回复(0)
如果常量池中存在有“xyz”,则只会创建一个对象,若常量池中没有,则会创建两个
发表于 2021-06-25 22:50:24 回复(0)