为什么在这种情况下它不会抛出NullPointerException

时间:2012-03-30 17:49:48

标签: java

我正在为我的申请编码,我遇到了一个要求,我需要将字符串转换为字符数组

String str_a = "Testing";

char c[] = str_a.toCharArray(); 

for (char d : c) {
    System.out.println(d);
}

因为我没有初始化char c[]

我的问题是为什么它不会抛出NullPointerException,通常应该这样做

char[] char_array = new char[str_a.length()];

char_array = str_a.toCharArray();       

for (char d : c) {
    System.out.println(d);
}

6 个答案:

答案 0 :(得分:5)

因为str_a.toCharArray();已初始化并分配了正确的字符数组。这个方法返回的内容已经为你进行了分配和初始化。

答案 1 :(得分:3)

toCharArray()的源代码:

/**
 * Converts this string to a new character array.
 *
 * @return  a newly allocated character array whose length is the length
 *          of this string and whose contents are initialized to contain
 *          the character sequence represented by this string.
 */
public char[] toCharArray() {
    char result[] = new char[count]; // <-- Here is the initialization :)
    getChars(0, count, result, 0);
    return result;
}

答案 2 :(得分:1)

当您立即将char_array的结果分配给str_a.toCharArray()时,无需初始化char_array

在你的第二个例子中,你正在创建一个空数组,它会立即丢弃,因为你会计算str_a.toCharArray()。方法toCharArray计算数组的值并返回它,因此您不必自己创建数组。

答案 3 :(得分:1)

这两种方法都运行得很好。第一个将新数组定义为char数组,第二个数组创建一个空数组并将其设置为等于char数组;当你接下来的时候,两者都是一样的,但第二条只有更多的线条。

您还可以节省一些时间并执行:

for(char c : str_a.toCharArray()){
  System.out.println(c);
}

答案 4 :(得分:0)

方法string.toCharArray()返回一个新的char[],无需先将变量初始化为其他内容。

事实上,如果您将代码保留为......

char[] char_array = new char[str_a.length()];
char_array = str_a.toCharArray();

这会将变量初始化为char[]的一个实例,然后将该实例抛弃到下一行。这是低效的,毫无意义的,也是错综复杂的。

答案 5 :(得分:0)

如代码所示,您使用变量c但不是c,您必须使用char_arra

char[] char_array = new char[str_a.length()];

char_array = str_a.toCharArray();       

for (char d : char_array) {
            System.out.println(d);
        }