[英]Returning String builder from a String function in Java?
我有以下程序,我必須將字符串附加到另一個字符串,我使用字符串構建器以標准方式執行。 但是,即使在將其轉換為toString()
之后,該函數也不允許我返回ab
。 我想問為什么?
import java.util.*;
public class prog1 {
public static String k(int i) {
String a = "1";
StringBuilder ab = new StringBuilder();
int pos = 1;
if (i == 1) {
return a;
}
else{
pos++;
String first = Integer.toString(pos);
ab.append(a).insert(0,first);
ab.toString();
return ab;
}
}
public static void main (String[]args){
k(2);
}
}
您不返回StringBuilder.toString()
返回的String
:
ab.toString();
return ab;
獲取ab.toString();
返回的結果ab.toString();
你必須將它分配給一個變量。 然后你可以退貨:
String s = ab.toString();
return s;
或者在您的情況下,您可以直接返回結果,因為您不需要操作/轉換返回的String:
return ab.toString();
ab.toString();
return ab;
toString()
方法不會將StringBuilder
神奇地轉換為String
。 它返回一個String
表示(您不使用它)。
將其更改為:
return ab.toString();
你應該
return ab.toString();
代替
return ab;
我將函數轉換為toString()后,該函數不允許我返回ab
調用ab.toString()
不會將ab
從StringBuilder
轉換為String
。 它返回一個新的String
實例,您沒有將該實例分配給任何變量,因此無法返回。
toString()方法確實返回 StringBuilder中包含的String。 它不會修改它的內容。
return ab.toString();
解決問題。
首先,您的代碼將無法編譯。 因為在else bock中你返回了一個StringBuilder而不是String。 現在,嘗試了解這些值將如何存儲在內存中,然后您將找到問題所在。
每當我們初始化變量時,都會在內存中創建一個新的引用。 如果我們想對任何引用操作任何String操作,那么將復制該引用的值,並在內存中創建一個新引用,然后String將發生該操作。
public class Test {
public static String k(int i) {
String ab = "ab "; // ----------------------------------------------- 1
StringBuilder stringBuilder = new StringBuilder("stringBuilder "); // -- 2
String c = ab.concat("c "); // ----------------------------------------- 3
ab.concat(stringBuilder.toString()); // -------------------------------- 4
String d = ab.concat(stringBuilder.toString()); // -------------------- 5
System.out.println("c : "+c);
System.out.println("d : "+d);
System.out.println("ab : "+ab);
return ab;
}
public static void main(String[] args) {
k(2);
}
}
輸出:
c : ab c
d : ab stringBuilder
ab : ab
在這個例子中,
由於這些原因,引用ab的值將與初始化相同,因為每次創建新引用時都將執行它的String操作。
但是在StringBuilder的情況下,所有操作都將在同一個引用中發生。 將不會創建另一個參考。
在您的代碼中,您可以通過將ab.toString()
值存儲在新引用中並返回該值來解決問題。 另一種方法是return ab.toString()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.