Java 将字符串传递给字符串数组引用
我对下面的代码有些困惑:Java 将字符串传递给字符串数组引用,java,object,nullpointerexception,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"; } } 我假设
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";
}
}
为什么这里可以?
为什么不引发异常?百慕大”是字符串文字,并且String str=“百慕大”
表示str
是一个值为“百慕大”的新字符串对象
上面的几行做了相同的工作,但有一点不同,第一个字符串实例由
Java字符串常量池管理,第二个不是。异常不会引发,因为您使用的是“静态”字符串,其内存是隐式创建的,引用被分配给孤岛[i]
您没有做错什么,编译器尊重这一点,并且它也在运行
使用静态字符串文字时,字符串对象是隐式创建的。
您也可以使用调试器尝试此操作,字符串“Bermuda”有一个对象id。当您声明变量但未创建对象时,会发生您询问的异常。在“String[]islands=new String[4];”行中,new关键字用于实例化(或创建)Integer类型的对象,指针变量islands被分配给该对象。所以你不会有例外。我明白了。因此,如果是这样的话,让我们假设NotAStringClass[]islands=newnotastringclass[4];那么将字符串传递到孤岛[0]将不起作用,对吗?@Lion您没有看到,抱歉。岛屿[0]=“百慕大”;岛屿[0]=新字符串(“百慕大”);在功能上做同样的事情,两者都会工作,但是为这两个赋值创建的字符串对象在内存中的不同位置。明白了。你的回答和哈桑的帮助我得到了。谢谢:)我现在明白了。谢谢,你和谢卡斯特帮我理解了。我只能选择一个答案,所以我会选择他的答案,但谢谢你们两位。随时都可以!我很高兴你理解了这个概念。
String str = "Bermuda";
String str = new String("Bermuda");