将字符串传递给字符串数组引用

时间:2013-01-12 10:30:01

标签: java object nullpointerexception

我对下面的代码感到有些困惑:

class BooksTestDrive {
  public static void main(String [] args) {
      String [] islands = new String[4];

      islands[0] = "Bermuda";
      islands[1] = "Fiji";
      islands[2] = "Azores";
      islands[3] = "Cozumel";


  }
}

我假设这会返回NullPointerException错误,因为没有初始化对象。

我以为我需要做

class BooksTestDrive {
  public static void main(String [] args) {
      String [] islands = new String[4];
      islands[0] = new String();

//    etc..

      islands[0] = "Bermuda";
      islands[1] = "Fiji";
      islands[2] = "Azores";
      islands[3] = "Cozumel";


  }
}

为什么这里好吗? 为什么不抛出异常?

4 个答案:

答案 0 :(得分:3)

“Bermuda”是字符串文字,String str = "Bermuda";表示str是一个新的String对象,其值为“Bermuda”

String str = "Bermuda";
String str = new String("Bermuda");

上面的行做了同样的工作,但有一点不同,第一个字符串实例由Java String constant pool管理,第二个字符串不是。{/ p>

答案 1 :(得分:0)

Exception未被抛出,因为您使用的是“静态”字符串,其内存是隐式创建的,并且引用分配给islands[i]

答案 2 :(得分:0)

你没有做错任何事,编译器尊重它并且它也在运行。

当您使用静态字符串文字时,隐式创建字符串对象。 你也可以用调试器试试这个,你的String“Bermuda”有一个对象id。

答案 3 :(得分:0)

当您声明变量但未创建对象时,会出现您询问的异常。在“String [] islands = new String [4];”行中,new关键字用于实例化(或创建)Integer类型的对象,并为指针变量岛分配此对象。所以你不会得到例外。