gpt4 book ai didi

java - Android Build Strings 让我抓狂

转载 作者:行者123 更新时间:2023-12-01 23:13:39 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com