2014-10-11 27 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