问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

String s = new String("abc");在内存中有几个对象?

提问网友 发布时间:2024-10-09 23:19
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:5小时前
String str=new String("abc"); 创建了2个String对象:
可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("abc")了。那么,new String("abc")看成"abc"和new String():
String的构造器:
public String(String original) { //other code ... } ,创建一个类的实例(对象)的方法有以下两种:
一、使用new创建对象。
二、调用Class类的newInstance方法,利用反射机制创建对象。
使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。引入另外一种创建String对象的方式的讨论——引号内包含文本。

这种方式是String特有的,并且它与new的方式存在很大区别。
String str="abc";
这行代码创建了一个String对象。
String a="abc"; String b="abc";
答案还是一个。
String a="ab"+"cd";
答案是三个。
说到这里,需要引入对字符串池相关知识的回顾。
在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此不用担心String对象共享而带来程序的混乱。字符串池由String类维护,可以调用intern()方法来访问字符串池。
再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中,对此我们不再赘述。因此用引号包含文本的方式来创建String对象以提高效率,实际上这也是在编程中常采用的。

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象
热心网友 回答时间:5小时前
一个
"abc"所在的引用,就是s。。
这里是用s特意指向原来的"abc"地址。。
热心网友 回答时间:5小时前
也可以说一个,也可以说两个
abc 首先是要存放在常量 区的
如果 之前用过abc字符串, 也就是之前常量池区有abc这个字符串,那么new String("abc"),就只新加了一个对象,
如果之前没有abc字符串,那就要先存在常量池区,然后才生成s对象 所以要创建两个对象

按你的问题, 内存中肯定会有两个对象, 三块内存分配: 分别是
s 这个变量在栈中的内存空间
abc 常量池区内存
new String("abc") 这个 s变量指向的对象内存

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

...xyz"; String y="abc"; y=x+y;//共创建了几个对象 ...s=new String("xyz"+"abc"); 一共创建了多少个对象?WHY?_百度... 别人饭店转让,包括饭店里面设备全部转让。我想接手,都需要注意哪些问题... 19款帕萨特是多少公里保养一次? 应届毕业的大学生自我鉴定 帕萨特1万公里不去4s店保养行吗 F码购买手机的问题。 ...到很大的一个墓里面,并且自己和别人身上都沾满尸水。。。何解... 小米手机通过F码下单过后 还可以修改吗 关于元旦的说说简短 ...试红米的F码 可我现在没钱 弄到支付那了 还能取消不? 如图,在三角形ABC中,E.D分别为AB.AC上的点,且角ADE=角B,求证AD*AC=A... ...BC上的点、且BD=AD,CE=AE.判断三角形ADE的形状、并说理 在三角形AFG中三角形ABC、BCD、CDE、DEG、DFG的面积分别是6、10、14... ...abc中ad是ab的1 ae/5是ac的1/3如三角形ade的面积是一那么 人类的哪些活动改变了地表?产生了什么影响 ...AE=4CE,AD=8厘米,DE=5厘米,求三角形ABC的面积.? 如图,三角形ABC的面积为1,作三角形ABC的中位线DE,记三角形ADE的面积为... 拘役会送拘留所吗 请知晓和请知悉的区别? String a = new String("abc");到底创建了几个对象呢? java中String a = new String("abc");这行代码中创建了几个对象,String... Stirng s=new String("a" +"b");这个大家认为创建了几个对象?_百度知 ... ...面试问题,StringBuffer h=new StringBuffer("abc");这条语句一共创... 女人保养年轻最大秘诀 女人平常需要怎么保养 照相馆能修照片图片吗 女人保养自己的妙招有哪些?女人保养自己有什么妙招? 物联网智能家居能为我们带来什么 ...去影楼洗相片,他们是用的激光打印吗?我要修改图片,用的分辨率是多少... 桌面系统是什么意思? ...上被限制登入,但手机可以登.我绑定了可以前的号码早就没用了,我也... 绝地求生进不去,说服务器非常繁忙,刚买的新号 我把qq绑定换成现在的手机号,登入时账号用我的手机号也能登入,我在绑定... ...自动登入的,有记录***,请问有没有软件可以显示出来。 今天刚买了个号下载好绝地求生,但一直运行不了,求大神帮我解决一下... 在360里不小心把声卡驱动卸了。驱动精灵也安装更新,右下角也有小喇叭... 不小心把声卡驱动删了。拿驱动精灵装了,拿电脑原装盘装了,黄色问号没有... 我把不小心把声音卸了,然后去装声卡驱动,发现控制面版里有 不小心把声卡卸载了,然后用驱动精灵更新了驱动,但就是安装不上 长期饮用黑茶的好处?坚持喝黑茶的效果!
Top