第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

equals()方法的問題

之前做過比較兩個(gè)String類型的值時(shí)

比如:

String str1="你好";

String str2="你"+"好";

String str3="你";

String str4="好";

String str5=str3+str4;

System.out.println(str1.equals(str2));

System.out.println(str1.equals(str5));

為什么這兩個(gè)句子返回的都是true啊,不是說好的比較地址的嗎?有疑惑啊

正在回答

2 回答

子木李 說得對(duì),樓主還可以嘗試去建立一個(gè)類的兩個(gè)實(shí)例,內(nèi)部變量完全一樣,但是你用equals去比較時(shí),返回的是false,這就會(huì)驗(yàn)證你理解中的兩個(gè)對(duì)象使用 equals 是進(jìn)行地址比較;但是你會(huì)發(fā)現(xiàn)兩個(gè)String,哪怕是通過new String()得到的(理論上是兩個(gè)對(duì)象),你會(huì)發(fā)現(xiàn)執(zhí)行 equals 操作會(huì)獲得 true, 這是因?yàn)閖ava字符池機(jī)制的作用,關(guān)于這個(gè)可以推薦樓主看下 “JAVA 字符池”,這個(gè)應(yīng)該可以幫到樓主;

另外補(bǔ)充一些我知道的相關(guān)的一知半解:String對(duì)象是不可改變的,比如說String str1 = new String("hello"); 然后你讓 str1 = "java"; 你會(huì)發(fā)現(xiàn)str1只是改變了自身引用,對(duì)其之前的內(nèi)容 “hello” 串并不會(huì)有改變;


0 回復(fù) 有任何疑惑可以回復(fù)我~

string類型的equals方法的規(guī)則是這樣的:如果兩個(gè)對(duì)象的類型一致,并且內(nèi)容一致,則返回true,樓主理解的比較地址也是正確的,不過java的String類的機(jī)制是:對(duì)于String實(shí)例,運(yùn)行時(shí)狀態(tài)會(huì)盡可能地確保任意兩個(gè)具有相同字符信息的String字面值指向同一個(gè)內(nèi)部對(duì)象,即是如果字面值一樣,那么它們其實(shí)是同一個(gè)地址,所以,返回的是true,str1、str2、str5都是“你好”

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

子木李

補(bǔ)充一點(diǎn),因?yàn)闃侵魇鞘褂?quot;"來創(chuàng)造一個(gè)字符串變量的,所以當(dāng)字面量一樣,雖然是不同的變量,但指向的是同一個(gè)地址,如果是使用new String來創(chuàng)建字符串變量,則即使字面量一樣,地址也是不一樣的,這個(gè)時(shí)候equals方法,返回的依然是true,原理之前說過了,而 == 則返回是false,因?yàn)榈刂凡灰粯?/div>
2015-10-22 回復(fù) 有任何疑惑可以回復(fù)我~
#2

羽丶 回復(fù) 子木李

Dog dog1=new Dog(); dog1.age="15"; Dog dog2=new Dog(); dog2.age="15"; 然后使用 dog1.equals(dog2) ,返回值是 false ,這兩個(gè)對(duì)象類型一致,內(nèi)容也一致,為什么返回false ? 想不明白,想請(qǐng)教一下。
2015-11-10 回復(fù) 有任何疑惑可以回復(fù)我~
#3

子木李 回復(fù) 羽丶

dog1和dog2是兩個(gè)不同的對(duì)象,他們的內(nèi)容是不一致的,內(nèi)容是指針,指向存儲(chǔ)這兩個(gè)對(duì)象的內(nèi)存區(qū)域。詳細(xì)一點(diǎn)說,就是,equals是適合string用的方法,而不是其他的對(duì)象,如果是其他對(duì)象類型的話,那么它會(huì)首先調(diào)用對(duì)象的toString方法,將對(duì)象轉(zhuǎn)為字符串,而你的dog對(duì)象轉(zhuǎn)為字符串的話,是Dog@后面跟內(nèi)存地址,所以,是不一樣的,如果樓主想使用equals的話,那么,就在dog類中重寫equals方法,然后判斷age是否相等。大概就是這個(gè)意思
2015-11-10 回復(fù) 有任何疑惑可以回復(fù)我~
#4

羽丶 回復(fù) 子木李

恩,謝了!
2015-11-10 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

舉報(bào)

0/150
提交
取消
Java入門第二季 升級(jí)版
  • 參與學(xué)習(xí)       531214    人
  • 解答問題       6327    個(gè)

課程升級(jí)!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會(huì)Java面向?qū)ο缶幊痰膴W妙

進(jìn)入課程

equals()方法的問題

我要回答 關(guān)注問題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)