社区
Java SE
帖子详情
巨菜的问题!!!!
gao526
2010-04-21 10:45:24
String s="abc"这个"abc"是在那里开辟的空间,栈里还是堆里???
...全文
240
22
打赏
收藏
巨菜的问题!!!!
String s="abc"这个"abc"是在那里开辟的空间,栈里还是堆里???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mars_Ma_OK
2010-04-21
打赏
举报
回复
[Quote=引用 1 楼 wgzhong 的回复:]
值都放在栈里面
引用放在堆里
[/Quote]
String是一个特殊的包装类数据。可以用:
String str = new String(“abc”);
String str = “abc”;
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放”abc”,如果没有,则将”abc”存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = “abc”;
String str2 = “abc”;
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。
String str1 =new String (“abc”);
String str2 =new String (“abc”);
System.out.println(str1==str2); // false
用new的方式是生成不同的对象。每一次生成一个。
因 此用第二种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String(“abc”);的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
另 一方面, 要注意: 我们在使用诸如String str = “abc”;的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。
ameko_2019
2010-04-21
打赏
举报
回复
我们知道得到String对象有两种办法: String str1="hello"; String str2=new String("hello"); 这两种创建String对象的方法有什么差异吗?当然有差异,差异就在于第一种方法在对象池中拿对象,第二种方法直接生成新的对象。
"abc"属于字符串池中,是放在栈中。
String str = "abc"; 在内存中"abc"存放在栈
String str1 = new String("abc"); 在内存中new String("abc")被存放在堆
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:
(1) 寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
(2) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
(3) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
(6) 非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。Java 1.1提供了对Lightweight persistence的支持。未来的版本甚至可能提供更完整的方案。
wgzhong
2010-04-21
打赏
举报
回复
值都放在栈里面
引用放在堆里
lulu0126
2010-04-21
打赏
举报
回复
呵呵 !
lulu0126
2010-04-21
打赏
举报
回复
还是被人误会!
luomf
2010-04-21
打赏
举报
回复
昵称改成 凤儿's_Jhon'
不然又得误会了,呵呵
luomf
2010-04-21
打赏
举报
回复
汗,俺是男滴~
看看我的资料就知道了,凤是我老婆
gao526
2010-04-21
打赏
举报
回复
[Quote=引用 17 楼 gao526 的回复:]
引用 13 楼 luomf 的回复:
一般人就知道栈区和堆区,所以经常不好理解非常正常,
学过C/C++就好理解了
感谢凤姐,学习了!
[/Quote]
再等等看,还能学习到什么,呵呵,完了就给分!
gao526
2010-04-21
打赏
举报
回复
[Quote=引用 13 楼 luomf 的回复:]
一般人就知道栈区和堆区,所以经常不好理解非常正常,
学过C/C++就好理解了
[/Quote]
感谢凤姐,学习了!
luozhangwen
2010-04-21
打赏
举报
回复
String s="abc";
String a="abc";
实际上s 与 a指向的是一片内存
麦田捕手
2010-04-21
打赏
举报
回复
幸好俺还学过数据结构
luomf
2010-04-21
打赏
举报
回复
一般人就知道栈区和堆区,所以经常不好理解非常正常,
学过C/C++就好理解了
luomf
2010-04-21
打赏
举报
回复
麻烦各位不懂的就不要误导人了好不好,对自己的言论要负责任的,就11楼的说的正确!!!
其它的话虽然正确但没针对LZ的问题。
一个由c/c++编译的程序(很遗憾我们的JVM虚拟机基本上使用c/c++写的)占用的内容分以下五个部分:
1、栈区:存放函数的参数值,局部变量的值等,由编译器自动分配释放。对象的引用其实就是一个地址值当然是存放在这里的。
2、堆区:引用所指向的对象就分配在堆里。
例如:A a = new A(); a 在栈里,new A() 就在堆里。这里的a其实就是一个地址值。
3、全局区(静态区):全部变量和静态变量是放在一块的,而且初始化的和未初始化是分开存放的。
4、文字常量区:常量字符串就是放在这里的。
回到楼主的问题:String s="abc"; s在栈里, "abc"就在这个区里面!!!
5、程序代码区:存放函数体的二进制代码
li445970924
2010-04-21
打赏
举报
回复
在常量池
xiaomaha
2010-04-21
打赏
举报
回复
那分的6楼是对的!
s303251680
2010-04-21
打赏
举报
回复
楼上的没事就溜达
liujun3512159
2010-04-21
打赏
举报
回复
路过的,呵呵
fanzi08
2010-04-21
打赏
举报
回复
对象引用和普通数据类型在栈里,java对象放在堆里
zfq642773391
2010-04-21
打赏
举报
回复
String s="abc"
你一看就知道s是个引用,那引用当然存在栈里,那引用指向的就是对象了,所以"abc"是对象,那对象自然就是存放在堆里了
欢乐极客
2010-04-21
打赏
举报
回复
"abc"放在数据段中
s 放在栈中,指向"abc"
加载更多回复(1)
2026 年高教社杯全国大学生数学建模竞赛B 题 无线电干扰源的快速自动定位与清除(数学建模,代码,论文免费分享)
内容概要:本文聚焦2026年高教社杯全国大学生数学建模竞赛B题“无线电干扰源的快速自动定位与清除”,提供涵盖数学建模、算法实现与论文撰写的全套技术支持,并扩展分享多个科研方向的Matlab/Simulink仿真项目,如无人机协同路径规划、电力系统无功优化、信号处理、图像处理、车间调度、新能源预测与优化调度等。资源内容不仅服务于竞赛备赛,还覆盖智能优化、通信定位、边缘计算、雷达追踪、深度学习等多个前沿科研领域,旨在为参赛学生与初级科研人员提供系统化、高质量的技术参考与资源共享。文中强调科研需逻辑严密、善于借力,并倡导按目录系统学习以提升建模能力与科研素养,所有资料可通过指定网盘链接或微信公众号免费获取。; 适合人群:全国大学生数学建模竞赛参赛者,具备Matlab编程与数学建模基础的本科及研究生,以及从事智能优化、信号处理、电力系统、路径规划、机器学习等方向的初级科研人员。; 使用场景及目标:①备战数学建模竞赛,快速掌握赛题解题思路、算法模型与论文写作模板;②开展科研项目时复现经典算法、借鉴成熟仿真方法,提升研究效率;③系统学习多领域(如无人机路径规划、微电网优化、光伏/风电预测、图像处理)的Matlab/Simulink实现技术。; 阅读建议:建议读者按照资源目录顺序系统浏览,结合网盘中的代码与文档进行实践操作,重点关注建模逻辑、算法实现细节与仿真结果分析,同时关注公众号与共享链接以获取完整资料,全面提升竞赛竞争力与科研实践能力。
INKPTR-ASCII-6x8
INKPTR-ASCII-6x8
epson 1390 拆解图
下载代码方式:https://pan.quark.cn/s/0636d5a2cd63 爱普生1390型宽幅照片打印机是一款备受摄影发烧友及小型设计机构欢迎的经典设备。经过一段时间的持续运作,其供纸辊可能会遭遇磨损或积聚灰尘,进而干扰打印机的正常运作,例如在打印过程中出现纸张移动或卡住等情况。本指南将系统性地阐述对爱普生1390进行拆解并更换供纸辊的具体操作方法。 1. **前期准备** 在着手拆解之前,务必要将打印机关闭并切断电源供应。需要准备一套适配的小型螺丝刀及辅助工具,同时备齐全新的供纸辊。采购供纸辊时,必须核实其与爱普生1390型号完全兼容。 2. **外部拆解** 开始移除打印机的外壳部件。通常情况下,这涉及到松开底部和背面的固定螺栓。在分离外壳时需格外谨慎,以免拉扯到机内部署的电线或线缆。 3. **曝露供纸部件** 继续对内部结构进行拆解,直至定位到供纸辊组件。这个过程可能需要取下墨盒托架、进纸模块等零件。务必记住各个部件的原始位置和朝向,以便后续顺利复原。 4. **拆卸供纸辊** 供纸辊一般通过轴心固定于打印机内部。借助螺丝刀或其他适宜工具松开固定轴,随后轻轻转动或抽离供纸辊。操作过程中需留意避免损伤周边的塑料构件。 5. **清洁或调换供纸辊** 若供纸辊仅因污损,可用柔软布料蘸取少量酒精进行轻柔擦拭,以去除附着物和尘埃。倘若供纸辊已出现损耗,则必须更换为新的。新供纸辊应依照原样安装,确保轴心与齿轮系统精确对接。 6. **重新组装** 依照与拆解相反的顺序,小心地将各个部件逐一装回,确保每部分都准确对齐并牢固固定。特别要注意连接线缆,防止其发生扭曲或过度弯曲。 7. **功能测试** 组装完毕后,重新接入电源,启动打印机,检验其是否能正常...
ai, psd, cdr, eps thumbnail viewer
源码直接下载地址: https://pan.quark.cn/s/7ca85afa6ad6 用于人工智能文件检视的软件、用于Adobe Photoshop文件检视的软件、用于CorelDRAW文件检视的软件、用于Encapsulated PostScript文件检视的软件,以及用于人工智能文件读取的软件、用于Adobe Photoshop文件读取的软件、用于CorelDRAW文件读取的软件、用于Encapsulated PostScript文件读取的软件,同时还包括用于人工智能、Adobe Photoshop、CorelDRAW、Encapsulated PostScript图像缩略图检视的软件。这些是在个人计算机系统中,以缩略图或网格布局形式检视图像文件时所需的应用程序!!!
12_时间类型转换工具类(Java企业级代码)
一个开箱即用的 Java 时间类型互转工具类 TimeConvertUtils,基于 JDK17 编写、无第三方依赖。支持在 Date、java.sql.Timestamp、Long 毫秒时间戳、String、LocalDate、LocalDateTime 之间互相转换,统一先归一化为 LocalDateTime 再按目标类型输出,新旧时间 API 通过系统默认时区换算;字符串自动识别 ISO、yyyy-MM-dd、yyyy-MM-dd HH:mm:ss 等常见格式,解析失败抛出带原因的明确异常。代码采用 final 类加私有构造、完整 JavaDoc,对标阿里巴巴规范,Spring Boot 3.x 直接可用。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章