激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

香港云服务器
服務(wù)器之家 - 編程語言 - JAVA教程 - java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹

java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹

2020-07-09 11:22java教程網(wǎng) JAVA教程

這篇文章主要介紹了java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下

java "equals"和"==”異同

首先簡(jiǎn)單說一下“equal”和“==”

==操作對(duì)于基本數(shù)據(jù)類型比較的是兩個(gè)變量的值是否相等,

對(duì)于引用型變量表示的是兩個(gè)變量在堆中存儲(chǔ)的地址是否相同,

即棧中的內(nèi)容是否相同

equals操作表示的兩個(gè)變量是否是對(duì)同一個(gè)對(duì)象的引用,

即堆中的內(nèi)容是否相同。

綜上,==比較的是2個(gè)對(duì)象的地址,而equals比較的是2個(gè)對(duì)象的內(nèi)容。

再簡(jiǎn)單介紹一下String

String類 又稱作不可變字符序列

String使用private final char value[]來實(shí)現(xiàn)字符串的存儲(chǔ),也就是說String對(duì)象創(chuàng)建之后,就不能再修改此對(duì)象中存儲(chǔ)的字符串內(nèi)容。String類有一個(gè)特殊的創(chuàng)建方法,就是使用""雙引號(hào)來創(chuàng)建。例如new String("123")實(shí)際創(chuàng)建了2個(gè)String對(duì)象,一個(gè)是"123"通過""雙引號(hào)創(chuàng)建的,另一個(gè)是通過new創(chuàng)建的.只不過他們創(chuàng)建的時(shí)期不同,一個(gè)是編譯期,一個(gè)是運(yùn)行期。java對(duì)String類型重載了+操作符,可以直接使用+對(duì)兩個(gè)字符串進(jìn)行連接。運(yùn)行期調(diào)用String類的intern()方法可以向String Pool中動(dòng)態(tài)添加對(duì)象。

區(qū)分兩種創(chuàng)建String對(duì)象的方法“”和new()

String是一個(gè)特殊的包裝類數(shù)據(jù)??梢杂茫?/p>

?
1
2
String str1 = new String("123");
String str2 = "123";

兩種的形式來創(chuàng)建

第一種是用new()來新建對(duì)象的,它會(huì)在存放于堆中。每調(diào)用一次就會(huì)創(chuàng)建一個(gè)新的對(duì)象。(實(shí)際是兩個(gè)正如上文所說,但是在常量池中存在“123”后就不會(huì)再在常量池中創(chuàng)建新的“123”)
第二種是先在棧中創(chuàng)建一個(gè)對(duì)String類的對(duì)象引用變量str,然后通過符號(hào)引用去字符串常量池里找有沒有"abc",如果沒有,則將"abc"存放進(jìn)字符串常量池,并令str指向”abc”,如果已經(jīng)有”abc”則直接令str指向“abc”。

這時(shí)我們應(yīng)該注意

一方面,第一種寫法有利與節(jié)省內(nèi)存空間.同時(shí)它可以在一定程度上提高程序的運(yùn)行速度,因?yàn)镴VM會(huì)自動(dòng)根據(jù)棧中數(shù)據(jù)的實(shí)際情況來決定是否有必要?jiǎng)?chuàng)建新對(duì)象。而對(duì)于String str = new String("123");的代碼,則一概在堆中創(chuàng)建新對(duì)象,而不管其字符串值是否相等,是否有必要?jiǎng)?chuàng)建新對(duì)象,從而加重了程序的負(fù)擔(dān)。另一方面,我們?cè)谑褂弥T如String str = "123";的格式定義類時(shí),總是想當(dāng)然地認(rèn)為,創(chuàng)建了String類的對(duì)象str。
對(duì)象可能并沒有被創(chuàng)建!而可能只是指向一個(gè)先前已經(jīng)創(chuàng)建的對(duì)象。只有通過new()方法才能保證每次都創(chuàng)建一個(gè)新的對(duì)象。

請(qǐng)看下列實(shí)例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package testString;
 
public class testString
{
  public static void main(String[] args)
  {
    String a = "123";
    String b = "123";
    System.out.println(a==b);
    System.out.println(a.equals(b));
    System.out.println("------------------------------------------");
    /**
     * true
     * true
     * 此處創(chuàng)建一個(gè)字符串"123"儲(chǔ)存在常量池中
     * 因?yàn)?quot;123"儲(chǔ)存在常量區(qū),并且唯一,即兩個(gè)String引用a和b所的地址相同所以a==b為true
     * 并且兩個(gè)引用在所指對(duì)象在堆中的內(nèi)容相同所以a.equals(b)為true
     */
    String c = new String("1234");
    String d = new String("1234");
    System.out.println(c==d);
    System.out.println(c.equals(d));
    System.out.println("------------------------------------------");
    /*
     * false
     * true
     * 此處創(chuàng)建三個(gè)字符串“1234”,一個(gè)在常量池中,兩個(gè)通過new儲(chǔ)存在堆中
     * 因?yàn)閏和d此時(shí)指向的是堆中的兩個(gè)String對(duì)象,所以地址不同 c==d為false
     * 但是c與d堆中內(nèi)容相同所以c.equals(d)為true
     */
    String e = "a1";
    String f = "a"+1;
    System.out.println(e==f);
    System.out.println(e.equals(f));
    System.out.println("------------------------------------------");
    /**
     * true
     * true
     * 此處創(chuàng)建“a1”“a”2個(gè)字符串其中“a1”“a”他們兩個(gè)均在常量池中,你可能會(huì)問+是個(gè)運(yùn)算符重載么?
     * 是的,java自己有一定的運(yùn)算符重載但是你沒法使用定義自己的運(yùn)算符重載,和c++不同,String f = "a"+1;
     * 這句會(huì)被編譯器做成 String f=“a1”;這與我們講到的第一種情況相同,不再贅述。
     * 編譯器之所以這么做是因?yàn)樗诰幾g時(shí)就能夠確定
     */
    String g = "gh";
    String hh = "h";
    String h = "g" + hh ;
    System.out.println(g==h);
    System.out.println(g.equals(h));
    System.out.println("------------------------------------------");
    /**
     * false
     * true
     * 與上面不同的是這里的h在編譯時(shí)不能確定(編譯器是這樣認(rèn)為的),所以h所指的對(duì)象在運(yùn)行時(shí)確定儲(chǔ)存在堆中,
     * 所以g==h為true而g.equals(h)為false
     */
  }
   
}<br>

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

原文鏈接:http://blog.csdn.net/qq_22841811/article/details/46317969

延伸 · 閱讀

精彩推薦
619
主站蜘蛛池模板: 日韩电影一区二区 | www.54271.com | 法国性xxx精品hd专区 | 高清视频一区二区 | 国产免费网站视频 | 九九热免费在线观看 | 久久精品探花 | www.777含羞草 | 亚洲成人免费影视 | 高清视频91| 欧美一级视频网站 | www噜噜偷拍在线视频 | 国内精品免费一区二区2001 | 蜜桃av鲁一鲁一鲁一鲁 | 最新久久免费视频 | 妇子乱av一区二区三区 | 91网址在线观看 | 一级免费黄视频 | 久久久电影电视剧免费看 | 麻豆视频在线免费观看 | 欧美毛片 | 2019天天干夜夜操 | 色诱亚洲精品久久久久久 | 欧美亚洲免费 | 国内精品久久久久久2021浪潮 | av在线网站观看 | 一级毛片真人免费播放视频 | 欧美aaaaa一级毛片在线 | 国产一级淫片在线观看 | 99re久久最新地址获取 | www.99xxxx.com| 婷婷中文字幕一区二区三区 | 久久亚洲春色中文字幕久久 | 久久久久久久久久久综合 | 国产一级毛片高清视频 | 久草在线小说 | 日本黄色免费观看视频 | 污视频在线免费播放 | 色天天综合网 | 国产羞羞视频在线观看 | 91成人免费网站 |