return from方法与方法中创建的数组不同

时间:2015-04-23 14:38:26

标签: java android arrays loops

好的,我无法理解这一点。

我有一个返回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++;
}

之间没有任何东西,它只是输出方法的返回,但在那一点上它有所不同。 我怎么得到一个额外的条目,它是如何在一开始出现的? 我错过了一些明显的东西吗?

3 个答案:

答案 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