簡體   English   中英

字符串緩沖區方法“ toString”

[英]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()))之所以有效,是因為它將ssb的值作為字符串進行比較,即使它沒有將值賦給變量。

sb.toString(); //這是怎么回事?

您正在將StringBuilder對象轉換為String ,這很好,但是您沒有將返回值存儲為String類型,以后在equals調用中使用它。 您應該通過以下方式進行操作:

String reversedString = sb.toString();
if(s.equals(reversedString )){

或者簡單地

if(s.equals(sb.toString())){

現在,您正在使用String類的equals方法將ssb進行比較。 如果作為參數傳入的對象不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM