我正在为我的申请编码,我遇到了一个要求,我需要将字符串转换为字符数组
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);
}
答案 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);
}