2014-10-11 69 views
0

我試圖從網頁讀取標題並將其保存爲字符串。但是,由於字符串在Java中是不可變的,所以我不能將它設置爲null,並在需要時將其更改。因此,我在strTitle可能尚未初始化的最後一行發生錯誤。這似乎應該很容易處理,但我無法弄清楚。提前致謝。在聲明的地方初始化的字符串

URL allRecipe = new URL(inputLine); //user defined url 
    BufferedReader urlIn = new BufferedReader(
     new InputStreamReader(allRecipe.openStream())); 

    String inputFromWeb; 

    //loops through webpage and finds title 
    while((inputFromWeb = urlIn.readLine()) != null){ 
    //getting title 
    if(inputFromWeb.contains("<title>")){ 
     strTitle = urlIn.readLine(); 
    } 

    }//end while 
    urlIn.close(); 

    //print out title 
    System.out.println("Title:"); 
    System.out.println(strTitle); //this line returns the error 
    System.out.println("\n"); 

回答

1

因爲字符串是在Java中不可改變的,我不能只將其設置爲null 並改變它,當我需要。

當然可以。如果您將String引用初始化爲null,然後爲其分配一個不同的String,則不會更改任何String,而只是更改String引用。

但是,正如我在最後一行 strTitle可能尚未初始化時出現錯誤。

String strTitle = null;

將解決你的問題。

+0

哦,謝謝!我不知道。我認爲字符串一旦被聲明就不能以任何方式改變。我想我應該嘗試一下。 是這樣的情況,因爲將字符串的值設置爲null並不算作初始化它,因爲null不是一個真正的值? – PsylentKnight 2014-10-11 02:36:09

+1

@PsylentKnight它與將其設置爲null無關。你也可以寫'String s =「x」; s =「y」;'在這種情況下,你並沒有將字符串的值從「x」改變爲「y」,而是將一個新的字符串賦值給s變量。 – Eran 2014-10-11 02:37:50

+0

顯然我並沒有完全理解字符串不變性的整個概念。我讀了更多,我想我現在就明白了。據我瞭解,上一次評論中的代碼會引用不同的內存位置,將舊的內存位置留在後面,成爲垃圾,然後由java處理。 – PsylentKnight 2014-10-11 02:51:24