有關練習中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>
謝謝。
2016-09-08
不需要重寫equals,因為String類里面已經幫我們寫好了比較內容的equals,你直接調用就可以了
2016-06-19
一旦一個字符串在內存中創建,則這個字符串將不可改變。
多次出現的字符常量,編譯器程序只創建一個
注意這里是常量哦
通過 String s3="I love"+s1; ,其實質是根據s1創建了字符串對象,變量 s3 指向了創建的字符串對象。
通過 String s4="I love"+s1; ,其實質是根據s1創建了新的字符串對象,變量 s4 指向了新創建的字符串對象。
這是兩個不同的對象 上面的代碼 幫助理解一下
上次碰到這個問題 是在主方法里進行調試的時候 main()方法是static修飾的 靜態方法中 不能直接訪問非靜態成員變量和方法 只可直接訪問靜態變量和方法 所以出現這個問題 加個就好了
希望有所幫助
2016-06-14
不相同是應該的,相同才是因為多次優化的結果。我這里編譯器允許重寫equals啊。
2016-05-23
在我的代碼中,定義S3中love后面是沒加空格的,s4有,所以會指向不同的單元,你可以去在確認以下,運行一下。在重寫equals()時 ,提示非靜態字段可以在重寫方法中加入靜態關鍵字,或者嘗試下在方法前加入一個@override,希望對你有幫助