好的,我无法理解这一点。
我有一个返回String数组的方法;
public String[] getstatusSelectedFromFragments(){
int jobCounter = 0;
String[] podSelectedLines = new String[fragArray.length]; //length will be 1 for testing
for(PodStatusFragment f : fragArray){
System.out.println("Job " + (jobCounter+1) + " ;;; ");
String [] selects = f.getSelections();
for(String s : selects){ //there are 6 to go through
podSelectedLines[jobCounter] += s.substring(0, Globals.getPodCodeLen());
System.out.println(s.substring(0, Globals.getPodCodeLen()));
}
jobCounter++;
}
return podSelectedLines; //this should contain 6 repeated codes
}
如果我正在填充上面的System.out,那么它是正确的并返回结果; " EPODEPODEPODEPODEPODEPOD"
如果我在返回后输出内容(如下),我得到结果; " nullEPODEPODEPODEPODEPODEPOD"
int tryer = 0;
String[] testStats = getstatusSelectedFromFragments();
while(tryer<testStats.length){ //length is 1 for testing
System.out.print("TESTINSTAT::: " + testStats[tryer]);
tryer++;
}
之间没有任何东西,它只是输出方法的返回,但在那一点上它有所不同。 我怎么得到一个额外的条目,它是如何在一开始出现的? 我错过了一些明显的东西吗?
答案 0 :(得分:1)
for (PodStatusFragment f : fragArray) {
podSelectedLines[jobCounter] = ""; // Was null.
System.out.println("Job " + (jobCounter+1) + " ;;; ");
String [] selects = f.getSelections();
for (String s : selects) { //there are 6 to go through
podSelectedLines[jobCounter] += s.substring(0, Globals.getPodCodeLen());
System.out.println(s.substring(0, Globals.getPodCodeLen()));
}
jobCounter++;
}
数组初始化为null。 或者更好地使用更快的StringBuilder。
for (PodStatusFragment f : fragArray) {
StringBuilder status = new StringBuilder();
System.out.println("Job " + (jobCounter+1) + " ;;; ");
String [] selects = f.getSelections();
for (String s : selects) { //there are 6 to go through
status.append(s.substring(0, Globals.getPodCodeLen()));
}
podSelectedLines[jobCounter] = status.toString();
jobCounter++;
}
答案 1 :(得分:1)
这一行准备数组:
String[] podSelectedLines = new String[fragArray.length];
它创建的是对String
的引用数组。由于这只是数组而且还没有输入任何内容,因此每个元素实际上都是null
。当你尚未向阵列分配任何内容时,这是默认值。
然后在您的代码中,您执行此操作:
podSelectedLines[jobCounter] += s.substring(0, Globals.getPodCodeLen());
这意味着“获取数组元素的当前值并将该字符串的值连接到它”。当前值为null。字符串连接将其转换为字符串"null"
,然后将子字符串连接到它。所以它相当于:
podSelectedLines[jobCounter] = "null" + s.substring(0, Globals.getPodCodeLen());
你在这里打印的内容:
System.out.println(s.substring(0, Globals.getPodCodeLen()));
只是你连接到字符串的部分,而不是实际的结果。
答案 2 :(得分:0)
如果您执行以下操作,则必须知道:
String a = null;
String b = 'test';
System.out.println(a + b);
结果将是'nulltest'。
但是,如果我将其更改为:
String a = "";
String b = 'test';
System.out.println(a + b);
结果将是'测试'。
请参阅Why i'm getting a null string when i try to add the splitted string?和Concatenating null strings in Java