当前位置:网站首页>String类创建的对象在JVM中的内存分配和equals与==的区别
String类创建的对象在JVM中的内存分配和equals与==的区别
2022-08-09 07:24:00 【哈希疯】
定义:
String s1 = "uml";
String s2 = "uml";
String s3 = new String("uml");
String s4 = new String("uml");
System.out.println(s1==s2);
System.out.println(s3==s4);
System.out.println(s1.equals(s4));
判断代码输出结果
A. true false true
B. false true false
解析
该题考察的是String类创建的对象在JVM中的内存分配和equals
与==
的区别。
==
比较的是地址和值equals
比较的是值
s1==s2
比较的是地址和值,由上图得知两个引用指向的是同一个地址,所以返回true
.s3 == s4
比较的是两个new出来开辟的空间对象地址,所以值相同,但地址不同,返回false
.s1.equals(s3)
比较的是内容,返回true
。
- 用
new
创建的对象在堆区
- 函数中的
临时变量
在栈区
- java中的
字符串
在字符串常量区
此题极为不严谨,答案与具体的JVM类型和具体的JVM版本都有关系。以下分析基于广泛使用的Oracle HotSpot虚拟机:
首先,String str1 = “abc” 编译为字节码后,实际上相当于:String str1 = “abc”.intern()对于JDK 1.6,intern()方法是这样的:如果“abc”是首次遇到,则字符串“abc”本身会被复制到字符串常量池中,且以后如果再遇到“abc”,直接返回常量池的引用。注意,JDK 1.6的常量池存在于JVM的永久代中,而对于Hotspot虚拟机的实现,永久代事实上对应java虚拟机规范中的方法区!
对于JDK 1.7,intern()方法不会对字符串实例进行复制,而只是在字符串常量池中记录首次出现的实例引用。当然,最关键的是,JDK 1.7中的字符串常量池是在堆中的!
具体请参考 “深入理解JAVA虚拟机”一书中 第 42页 和 第57页 的讨论
边栏推荐
- PyTorch中 torch.nn与torch.nn.functional的区别
- 力扣 636. 函数的独占时间
- 【机器学习】支持向量机(SVM)代码练习
- 虚拟机网卡报错:Bringing up interface eth0: Error: No suitable device found: no device found for connection
- Important news丨.NET Core 3.1 will end support on December 13 this year
- 图论,二叉树,dfs,bfs,dp,最短路专题
- car-price-deeplearning-0411
- 95后,刚工作2-3年就年薪50W+ ,才发现打败我们的,从来不是年龄···
- 高项 04 项目变更管理
- 神经网络优化器
猜你喜欢
更改Jupyter Notebook默认打开目录
低成本、大容量、高交互…Polkadot 引领 GameFi 实现新突破
stm32定时器之简单封装
RestFul,会话技术,Fiddler
高项 04 项目整体管理
Pytorch中 nn.BatchNorm2d() 归一化操作
排序第一节——插入排序(直接插入排序+希尔排序)(视频讲解26分钟)
排序第三节——交换排序(冒泡排序+快速排序+快排的优化)(5个视频讲解)
基于布朗运动的文本生成方法-LANGUAGE MODELING VIA STOCHASTIC PROCESSES
PyTorch中 torch.nn与torch.nn.functional的区别
随机推荐
查看日志常用命令
排序第一节——插入排序(直接插入排序+希尔排序)(视频讲解26分钟)
Distributed id generator implementation
unity第一课
【sqlite3】sqlite3.OperationalError: table addresses has 7 columns but 6 values were supplied
数据库索引原理
【转载】Deep Learning(深度学习)学习笔记整理
Lottie系列二:高级属性
分布式事务的应用场景
Flexible and easy-to-use sql monitoring script part7
stm32定时器之简单封装
Unity first lesson
Learning Notes---Machine Learning
高项 04 项目变更管理
P6 ali machine test of 2020 Fibonacci number
Zero shift of leetcode
View log common commands
Tkinter可以选择的颜色
【修电脑】系统重装但IP不变后VScode Remote SSH连接失败解决
Change Jupyter Notebook default open directory