[英]String Buffer method “toString”
當您調用沒有字符串變量的“ toString”方法來收集返回的值時會發生什么? 例如:這是我累的兩個代碼片段。 第一個給出正確答案,第二個給出錯誤答案,但仍可以編譯。 如果“ toString”方法旨在返回一個值,那么第二個代碼塊是否應該出現編譯器錯誤?
StringBuffer sb=new StringBuffer(s); //s is a string input taken from user
sb.reverse();
String rev=sb.toString();
if(s.equals(rev)){
System.out.println("yes");
/*second try*/
StringBuffer sb=new StringBuffer(s);
sb.reverse();
sb.toString();//what is happening here?
if(s.equals(sb)){
System.out.println("yes");
這很容易理解。
在第一種情況下 ,該值將被返回並被變量引用,以便您以后可以使用該值。
在第二種情況下 ,該值將像以前一樣返回,但是沒有任何變量引用它。 因此,該值只會浪費掉,以后無法使用或操縱。
toString將返回對象的toString方法返回的任何內容。 嘗試System.out.println(sb.toString); 看看它返回了什么。
StringBuffer#toString()
返回一個字符串,如果您不將返回的值放在變量中,則什么也不會發生,並且您所請求的信息也消失了。
.toString()
是一種返回字符串的方法,它不會將該StringBuffer轉換為字符串。
if(s.equals(sb.toString()))
之所以有效,是因為它將s
與sb
的值作為字符串進行比較,即使它沒有將值賦給變量。
sb.toString(); //這是怎么回事?
您正在將StringBuilder
對象轉換為String
,這很好,但是您沒有將返回值存儲為String
類型,以后在equals
調用中使用它。 您應該通過以下方式進行操作:
String reversedString = sb.toString();
if(s.equals(reversedString )){
或者簡單地
if(s.equals(sb.toString())){
現在,您正在使用String
類的equals
方法將s
與sb
進行比較。 如果作為參數傳入的對象不是String
類的實例,則此方法返回false
。 由於StringBuilder
對象sb
不是String
的實例,所以equals
方法返回false。
在Java中,您不必檢查或存儲任何返回值。 sb.toString()
被執行,返回值被截斷。
請注意,該方法必須執行,因為可能會有副作用。 要進行測試,可以在您的類中實現:
@Override
public String toString() {
System.out.println("toStringTest");
return super.toString();
}
“ toStringTest”將被淘汰!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.