当前位置:网站首页>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页 的讨论
边栏推荐
- XILINX K7 FPGA+RK3399 PCIE驱动调试
- imageio读取.exr报错 ValueError: Could not find a backend to open `xxx.exr‘ with iomode `r`
- 力扣 636. 函数的独占时间
- 排序第四节——归并排序(附有自己的视频讲解)
- 【MySQL】update mysql.user set authentication_string=password(“123456“) where User=‘root‘; 报错
- HDU - 3183 A Magic Lamp 线段树
- way of thinking problem-solving skills
- 力扣208,实现Trie(前缀树)
- Tkinter可以选择的颜色
- 【机器学习】中国大学慕课《机器学习》课后习题(二)(回归)
猜你喜欢
高项 04 项目变更管理
PyTorch中 torch.nn与torch.nn.functional的区别
SAP ALV data export many of the bugs
postgresql Window Functions
95后,刚工作2-3年就年薪50W+ ,才发现打败我们的,从来不是年龄···
虚拟机网卡报错:Bringing up interface eth0: Error: No suitable device found: no device found for connection
细谈VR全景:数字营销时代的宠儿
数据库索引原理
子路由及路由出口配置
【报错】Root Cause com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
随机推荐
P1505 [国家集训队]旅游 树链剖分
sklearn数据预处理
redis学习笔记
类和结构体
搭载开源鸿蒙系统的嵌入式XM-RK3568工业互联方案
makefile记录
排序第三节——交换排序(冒泡排序+快速排序+快排的优化)(5个视频讲解)
物理层课后作业
View log common commands
细谈VR全景:数字营销时代的宠儿
SA-Siam:用于实时目标跟踪的双重连体网络A Twofold Siamese Network for Real-Time Object Tracking
Classes and Structures
【烂笔头】各厂商手机手动抓log
2022 年全球十大最佳自动化测试工具
Inception V3 Eye Closure Detection
A brief introduction to microservice architecture
【Oracle 11g】Redhat 6.5 安装 Oracle11g
P6 ali machine test of 2020 Fibonacci number
RestFul,会话技术,Fiddler
Zero shift of leetcode