首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
String s = new St...
[单选题]
String s = new String("xyz");创建了几个StringObject?
两个或一个都有可能
两个
一个
三个
查看正确选项
添加笔记
求解答(22)
邀请回答
收藏(3985)
分享
65个回答
添加回答
234
人余月半子
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
回复(20)
151
Zn微凉
如果常量池中存在“xyz”就只会创建一个对象,如果没有就会创建两个!
发表于 2019-08-16 00:53:35
回复(13)
83
天使的腿毛
三短一长选最长,
三长一短选最短。
发表于 2019-08-15 23:20:05
回复(8)
77
29。
如果在常量池中已经存在“xyz”,那么不会继续创建,只创建一个new String("xyz")的对象。如果常量池中没有,则会创建两个对象,一个是对象的值“xyz”,一个是new String("xyz")的对象。
发表于 2019-08-20 20:06:57
回复(1)
17
执梗
通过new实例的方法创建字符串时,我们都知道会在堆上创建对象。我们也知道还有字符串常量池这个东西,但是很多人不知道的是你在new字符串时jvm会去检查常量池是否存在这个对象。如果存在,它只会在堆上创建一个对象。如果不存在,它会在常量池和堆上同时都创建一个对象,也就是两个对象。
发表于 2021-12-20 20:56:26
回复(1)
7
xknowledge
这道题含糊其辞,典型的流氓题。反正答案怎么说怎么有理。它要说是“2个”,它也是有道理的。就像现在的女生讨论男生时,男生永远处在陷阱当中,不是被评为渣男就是直男。
SB题目。
发表于 2021-06-09 17:13:52
回复(2)
5
堆高高
String s = new String("xyz");
s 只是一个对象引用,并不是一个对象,可以理解为一个指针,实际上也就只创建了堆上上一个内存和常量池里的一个对象(也有可能不创建)
即 2 或 1
发表于 2022-03-09 16:30:41
回复(0)
5
Tomorrow123
<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)
5
徐先生想成为一名优秀的程序员
** 这题太阴了
发表于 2020-03-30 19:03:22
回复(1)
3
程序牛🐂
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)
3
修改失败:昵称已被占用
如果在字符串池子里不存在“xyz”,就创建一个字符串常量“xyz”,并将其添加到字符串池子里;如果存在,则不创建,然后new String()会在堆中创建一个新对象。
发表于 2021-07-14 19:02:36
回复(0)
3
惠鸿飞
如果在常量池中已经存在“xyz”,那么不会继续创建,只创建一个new String("xyz")的对象。如果常量池中没有,则会创建两个对象,一个是对象的值“xyz”,一个是new String("xyz")的对象s。
发表于 2019-09-11 18:29:21
回复(0)
2
hjw爱Java
如果常量池中存在有“xyz”,则只会创建一个对象,若常量池中没有,则会创建两个
发表于 2022-09-24 13:56:39
回复(0)
2
念您
[cp]以前我是堆,你是栈 你总是能精准的找到我,给我指明出路 后来有一天我明白了 我变成了栈,你却隐身堆海 我却找不到你了,空指针了 我不愿意如此,在下一轮full gc前 我找到了object家的finalize 又找到了你,这次我不会放手 在世界重启前,一边躲着full gc一边老去[/cp]
发表于 2022-03-18 11:45:32
回复(0)
2
cs的小翰翰
String对象创建有两种方式
第一种是在常量池中获取对象,仅仅在编译期间在常量池中创建一个字符串对象
第二种是创建两个字符串对象,一个在堆中,一个在常量池中。
发表于 2022-02-19 16:01:14
回复(0)
2
n1ceShot
如果常量池中存在xyz 则创建一个,如果不存在xyz 则创建2个
发表于 2021-10-15 16:43:00
回复(0)
2
刘索隆
只要有new,就是在堆中创建对象。但是string为了防止重复创建,会有串池,如果串池中没有,也需要在串池中创建一个对象。 以后不用new的创建字符串直接从串池里引用就行。
发表于 2021-09-11 12:34:35
回复(0)
2
飞鸿踏雪泥↣
常量池中若己经存在xy2,就在堆中创建一个,否则在常量池和堆中分别创建一个
发表于 2021-06-26 09:38:13
回复(0)
2
飞鸿踏雪泥↣
常量池中若己经存在xy2,就在堆中创建一个,否则在常量池和堆中分别创建一个
发表于 2021-06-26 09:38:13
回复(0)
2
我好饿_早知道不学Java了
如果常量池中存在有“xyz”,则只会创建一个对象,若常量池中没有,则会创建两个
发表于 2021-06-25 22:50:24
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
安卓工程师
2018
Java
360集团
来自:
360公司-2018春...
上传者:
小小
难度:
65条回答
3985收藏
4853浏览
热门推荐
相关试题
若用冒泡排序对关键字序列{10,8...
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
2018
奇安信
评论
(1)
小支欲用积分兑换安仔娃娃。兑换的规...
360集团
智力题
评论
(24)
来自
360公司2014校招笔试卷
设一组初始记录关键字序列为(30,...
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
2018
奇安信
评论
(1)
变量void (*s[5...
360集团
C++
安卓工程师
2018
C语言
评论
(18)
来自
360公司-2018春招...
执行以下程序,理论上输出的结果应最...
360集团
Python
算法工程师
2019
评论
(1)
来自
360公司-2019校招...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题