java - Android Build Strings 让我抓狂

标签 java android string

虽然构建字符串让我感到困惑。如果我这样做:

String line;
String webreponse ;
while ((line = reader.readLine()) != null) {
     webreponse = webreponse + line;
} // while reader != null

Eclipse 说:“局部变量 webreponse 可能尚未初始化”并让我这样做:

String line = null;
String webreponse = null ;
while ((line = reader.readLine()) != null) {
      webreponse = webreponse + line;
} // while reader != null

但是,然后我最终得到:“添加了 nullSome Strings”,添加了 NULL。当然,如果我更改 String webreponse = "";空字符串它可以工作,但是,这通常是一个不好的方法,因为我刚刚初始化了 var webresponse,而它不应该是(并且以后无法检查 null)!

当然,我也尝试过使用字符串生成器和类似的东西,但是,初始化为 null 的字符串生成器给了我:“这个 var 此时只能为 null NPE”

说真的,它就像一把海锯,将其保留为“String webreponse”,然后我得到编译器错误,放入“String webreponse = null”我在字符串中得到null并放入String webreponse =“”;我已经初始化了一个不应该的变量...

这样做的“正确”理由是什么?

最佳答案

Java 中的字符串是不可变的。每次使用连接运算符 (+) 时,您实际上都是在创建一个新的 String 对象。

因为您从 Stringnull 开始...连接过程中的转换会导致结果中出现单词“null”(这是在使用字符串连接时的 JLS)。

可以简单地从一个空的String开始(例如String webresponse = ""),但由于上述的不变性,这仍然非常低效。

您想使用StringBuilder:

String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
      sb.append(line);
}

编辑:

我刚刚注意到:“这通常是一个不好的方法,因为我刚刚初始化了不应该的 var webresponse(并且以后无法检查 null)!”

String 确实提供了 .isEmpty() 方法...所以我不知道 null 给你带来了什么好处,但是你可以简单地检查 StringBuilder

的长度
String webresponse = null;
if (sb.length() > 0)
{
    webresponse = sb.toString();
}

关于java - Android Build Strings 让我抓狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21541836/

相关文章:

java - 我有一个具有多种方法的类文件,我可以从测试用例中调用该类吗

java - 使用 Jsoup 仅删除 html 标签并保留标签内的文本

android - 在谷歌地图 api 2 上 move 标记

java - 在循环中一个一个地创建套接字数量

php - 提取单词前后的部分字符串

string - 替换golang中第N次出现的字符串

c++ - 如何将用户输入(字符串)转换为字符数组?

java - 为什么有N个节点的AVL树会保持C<=N/2?

java - 消息传递基础设施如何将主题映射到 PUB/SUB 的 IPC/TCP 层?

android - Google Play服务将support-v4的版本提高到24.0.0