国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

碼農帶你區分String類型的"=="和equals()

2019-11-14 15:02:21
字體:
來源:轉載
供稿:網友

大家玩csdn也可以關注我的博客額http://blog.csdn.net/wujiandong25253344

情形一:

String s1= new String("hello");

String s2 = new String("hello");                                                                                

當我們使用new時,每次都會在內存中開辟一個新的空間存放對象的值,

“==”號比較的是s1,s2對象的內存首地址,equals比較的是內存中具體的值
所以(s1==s2)返回false;(s1.equals(s2))返回true;

如下圖1所示:

                                                                                                     圖1

情形二:

String s1= "hello";
String s2 = "hello";
字符串“="號賦值只有在遇到代碼時才緩存到常量池中,
如上圖兩行代碼,當String s1= "hello";執行時,先會在heap中的常量池(String pool)中查找有沒有"hello"的字符串存在,如果存在,就返回字符串的首地址,
如果不存在,就在常量池中新建一個"hello",并返回字符串的首地址。我們可以看出,第一行代碼是不存在,所以返回字符串的首地址。

當執行到String s2 = "hello";我們從常量池中發現"hello"已經存在,返回原字符串的內存首地址

所以(s1==s2),返回的是true;(s1.equals(s2))返回true;

如下圖2所示:

                                                                                             圖 2

情形三:

String s1= "hello";
String s2= new String("hello");

s1是存放的常量池中的"hello"的首地址,s2是new出來的對象,所以新建一塊內存,存放的是新內存中"hello"的首地址。

所以(s1==s2),返回的是false;(s1.equals(s2))返回true;

如下圖3所示:

 

                                                                                                          圖 3

 

各位看官,困惑你們已久的String字符串中"=="與equals()方法的使用理解明白了嗎?謝謝觀看,下次再見!

 


上一篇:java中的集合類

下一篇:java多線程剖析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐津县| 竹北市| 南陵县| 阿合奇县| 平乐县| 应城市| 峡江县| 花莲市| 河津市| 井冈山市| 湘阴县| 蒙城县| 邛崃市| 富蕴县| 榆林市| 富川| 西林县| 韩城市| 扎兰屯市| 白朗县| 崇信县| 天峨县| 大渡口区| 赤水市| 耒阳市| 嘉善县| 华阴市| 丹棱县| 江阴市| 顺平县| 延吉市| 西充县| 蚌埠市| 丹巴县| 闽清县| 大丰市| 德兴市| 江北区| 孙吴县| 郎溪县| 保山市|