java中==和equals的区别
程序员文章站
2022-04-16 08:16:18
...
在初期学习java时,肯定会遇到==和equals的区别这一知识点,其实很简单,一句话:equals:比较字面值;==:不止比较字面值,还比较对象的内存地址。
先来一段代码:
@Test
public void test(){
String str1="abc";
String str2="abc";
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
//结果都为true,因为str1创建时在堆中开辟了一块新的内存,存储abc,str则保存在栈中,而str2在创建时,由于abc已经
//存在,所以直接把内存地址给str2,而没有重新开辟新的内存地址,所以,打印结果都是true
String str3=new String("def");
String str4=new String("def");
System.out.println(str3==str4);
System.out.println(str3.equals(str4));
//==打印的是false,equals打印的是true,因为new String 不管之前的内容是否在内存中已经存在
//在新定义时,都会重新开辟一块内存来存储这块内容,从而str3和str4的内存地址是不同的。
}
至于为什么new String()会开辟一块新的内存呢,追一下源码:
从new String()的源码可以看出,new String()会更改hash值,所以会重新给定义的字符串分配内存地址,这样,就算定义的字符串值是一样的,内存地址也是不同的啦。
上一篇: 设计模式不得不知道的 UML 类图
推荐阅读
-
Android 中clipToPadding 和 clipChildren区别和作用
-
Python中input和raw_input的一点区别
-
详解关于Android Studio中安装和gradle的一些坑
-
Android学习之Intent中显示意图和隐式意图的用法实例分析
-
Python中dict和set的用法讲解
-
PHP中spl_autoload_register()和__autoload()区别分析
-
对Python w和w+权限的区别详解
-
PHP中echo和print的区别
-
PHP中cookie和session的区别实例分析
-
关于vue的npm run dev和npm run build的区别介绍