亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有關練習中s3,s4的以及equals()方法的使用

String s1 = "imooc";

String s2 = "imooc";

String s3= "I love "+ s1;?

String s4 = "I love " + s1;

代碼中的定義,并沒有用到new,不應該同s1,s2的理解(多次出現的字符常量,編譯器程序只創建一個)一樣么?s3,s4為什么是指向的不同單元???


因(s3==s4)比較的是s3和s4引用所指向的內存單元的地址,如需比較s3,s4的值重寫equals()方法。可是為什么編譯器不允許重寫?提示:此類中沒有非靜態字段,不能重寫equals()。這是為什么?。?/p>


謝謝。


正在回答

4 回答

不需要重寫equals,因為String類里面已經幫我們寫好了比較內容的equals,你直接調用就可以了

0 回復 有任何疑惑可以回復我~

一旦一個字符串在內存中創建,則這個字符串將不可改變。

多次出現的字符常量,編譯器程序只創建一個

注意這里是常量哦

String?s1?=?"imooc";
String?s2?=?"imooc";
//String?s3?=?"I?love?"?+?s1;
//String?s4?=?"I?love?"?+?s1;

String?s3?=?"I?love?"?+?s1;
s1?=?"Mary";
String?s4?=?"I?love?"?+?s1;

通過 String s3="I love"+s1; ,其實質是根據s1創建了字符串對象,變量 s3 指向了創建的字符串對象。

通過 String s4="I love"+s1; ,其實質是根據s1創建了新的字符串對象,變量 s4 指向了新創建的字符串對象。

這是兩個不同的對象 上面的代碼 幫助理解一下


此類中沒有非靜態字段,不能重寫equals()。

上次碰到這個問題 是在主方法里進行調試的時候 main()方法是static修飾的 靜態方法中 不能直接訪問非靜態成員變量和方法 只可直接訪問靜態變量和方法 所以出現這個問題 加個就好了

希望有所幫助

1 回復 有任何疑惑可以回復我~

不相同是應該的,相同才是因為多次優化的結果。我這里編譯器允許重寫equals啊。

0 回復 有任何疑惑可以回復我~

在我的代碼中,定義S3中love后面是沒加空格的,s4有,所以會指向不同的單元,你可以去在確認以下,運行一下。在重寫equals()時 ,提示非靜態字段可以在重寫方法中加入靜態關鍵字,或者嘗試下在方法前加入一個@override,希望對你有幫助

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Java入門第三季
  • 參與學習       409767    人
  • 解答問題       4543    個

Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧

進入課程

有關練習中s3,s4的以及equals()方法的使用

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號