Java字符串==和equals的区别
2021-03-24 01:26
标签:bsp 字符串池 解释 建设 cin 更改 == als containe 首先我们来了解一下String类,Java的字符串是一旦被赋值之后无法更改的(这里的无法更改是指不能将字符串中单个或一段字符重新赋值),这也是Java虚拟机为了减少内存开销,避免字符串的重复创建设立的机制,也就是字符串池。 那么字符串池是干嘛的呢?先不急,我们先来回顾一下两种创建字符串的方式。 这种创建方式JVM会在字符串池查找是否存在“abc”这样的对象,如果没有,就会在字符串池中创建这个对象,然后将该对象的引用地址返回给变量str1,此时str1就会指向字符串池中“abc”这个对象。 那么如果我们再创建一个相同的字符串呢? 因为之前已经创建过“abc”对象,所以这时候JVM就会发现字符串池中已经存在“abc”这个对象了,那就不需要再重复创建了,只需要把之前创建过的对象的引用地址返回给变量str2,此时str2就会指向字符串池中的“abc”对象。 当new一个字符串对象时,JVM就会在字符串池中查找是否存在“abc”对象,我们这里假设之前还没创建过,那么字符串池中就会创建“abc”对象,并且还会在堆中开辟内存创建“abc”对象,并把堆中该对象的地址返回给变量str3,str3指向堆中的“abc”对象。 那么如果我们再创建一个相同的字符串呢? 这个时候由于字符串池中已经存在“abc”了就不重复创建,因为是new所以还是会在堆中创建“abc”对象,并把堆中该对象的地址返回给变量str4,str4指向堆中的“abc”对象. 好了现在我们把两种字符串创建方式搞清楚了,现在就该进入正题了。这里先直接给出字符串中==和equal的区别,然后再做解释。 Java字符串==和equals的区别 标签:bsp 字符串池 解释 建设 cin 更改 == als containe 原文地址:https://www.cnblogs.com/saule/p/13830642.html(1)直接赋值
String str1 =
"abc"
;
String str2 =
"abc"
;
(2)new
String str3 =
new
String(
"abc"
);
String str4 =
new
String(
"abc"
);
上一篇:(C#)字符串反转
下一篇:springboot启动流程
文章标题:Java字符串==和equals的区别
文章链接:http://soscw.com/index.php/essay/67876.html