为什么我尝试添加拆分后的字符串时得到空字符串?

Why i'm getting a null string when i try to add the splitted string?

我有 splited 一个字符串,我试图从接收到的字符串中组成一个词,一切正常,但每次我在第一个 null 字符串中得到 index 为什么?

这是我的代码:

    String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates";
    String[] splits = assetClasses.toString().split(":");

    //System.out.println("splits.size: " + splits.length);
    String ab = null;
for(int i=0; i<splits.length;i++){
    System.out.println(splits[i]);
    ab+=splits[i];
}
System.out.println(ab);

输出:

Gold Stocks Fixed Income Commodity Interest Rates

nullGoldStocksFixed IncomeCommodityInterest Rates

String ab = null;更改为String ab = "";

作为补充,请参阅 Concatenating null strings in Java 了解使用 String ab = null;

时发生的情况

此外 - 字符串是不可变的,因此您在执行此方法期间创建了很多不必要的对象。改为使用可变 StringBuilder:

    String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates";
    String[] splits = assetClasses.split(":");

    StringBuilder ab = new StringBuilder();
    for (int i = 0; i < splits.length; i++) {
        System.out.println(splits[i]);
        ab.append(splits[i]);
    }
    System.out.println(ab.toString());

让我强调一下 npinti 所说的内容。 java 中的字符串是不可变的。这意味着每次你说 ab+=splits[i]; 你都在创建一个新字符串。这是一个非常缓慢且低效的过程。

相反,您可以;

String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates";
String[] splits = assetClasses.toString().split(":");

//System.out.println("splits.size: " + splits.length);
StringBuilder ab = new StringBuilder();
for(int i=0; i<splits.length;i++){
    System.out.println(splits[i]);
    ab.append(splits[i]);
}
System.out.println(ab.toString());

就这么简单!

它给出空值是因为在下面的java的String class中是String class.

的valueOf api的实现
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}