首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
String s = new St...
[单选题]
String s = new String("xyz");创建了几个StringObject?
两个或一个都有可能
两个
一个
三个
查看正确选项
添加笔记
求解答(22)
邀请回答
收藏(4089)
分享
66个回答
添加回答
238
人余月半子
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)
152
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)
18
执梗
通过new实例的方法创建字符串时,我们都知道会在堆上创建对象。我们也知道还有字符串常量池这个东西,但是很多人不知道的是你在new字符串时jvm会去检查常量池是否存在这个对象。如果存在,它只会在堆上创建一个对象。如果不存在,它会在常量池和堆上同时都创建一个对象,也就是两个对象。
发表于 2021-12-20 20:56:26
回复(1)
8
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春...
上传者:
小小
难度:
66条回答
4089收藏
5019浏览
热门推荐
相关试题
设一组初始记录关键字序列为(30,...
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
测试工程师
安全工程师
2018
奇安信
评论
(1)
尝试编译以下程序会产生怎么样的结果...
Java
Java工程师
小鹏汽车
2020
JavaSE
评论
(150)
针对下面的代码块,哪个选项结果为t...
Java
Java工程师
小鹏汽车
2020
JavaSE
评论
(54)
下面代码中"document.wr...
Javascript
评论
(1)
在 Java 中,以下哪些是处理字...
Java
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题