为什么我出现The local variable arcType may not have been initialized
错误?
第一案:
String arcType;
if (//somecondition) {
arcType += "Test"; // Here it show the error
System.out.println(arcType);
}
但是工作正常。
第二案:
String arcType = null;
if (//somecondition) {
arcType += "Test"; // It's working fine
System.out.println(arcType);
}
Output of the above program : nullTest
如果我使用String
初始化space
,则space
与Test连接。使用修剪空间将删除,但我不想使用修剪。
我的问题是:
为什么我在第一种情况下出现The local variable arcType may not have been initialized
错误?
在我使用null
初始化字符串的第二种情况下,为什么我输出nullTest
?
我只想输出Test
。
答案 0 :(得分:4)
1-仅会员&默认情况下初始化类变量。 本地变量不是
。 仅当传递的对象不是toString()
时,才会隐式调用 2- null
。如果是,则打印文字"null"
。因此,为了将"Test"
作为输出,您需要将字符串初始化为空字符串。
来自文档:Objects#toString()
返回调用toString的非null参数的结果 "空"对于空参数。
答案 1 :(得分:1)
然后你应该用空的init:
String arcType = "";
在内部方法中,必须在使用之前初始化所有声明的变量。
Null也是一个值,因此当您将String引用为null并将其连接时,它将使用null + concate值。
答案 2 :(得分:0)
Yiu正如他所说的那样疯狂地得到错误 - 变量可能没有初始化(如果条件是假的 - 它不会)
+=
运算符是s = s + "test"
的语法糖。由于最初s为null,你将得到`null +“test”
您应该将s初始化为空字符串`
答案 3 :(得分:0)
首先,在对任何变量进行操作之前,即使用null初始化它也可以初始化它。但它应该初始化。
其次,如果我们阅读java文档,我们会发现当字符串初始化为null并且如果我们在其上调用join或+运算符时,它将被视为具有空值。 "返回一个新的字符串,该字符串由连接在一起的CharSequence元素的副本和指定的分隔符的副本组成。
例如, String message = String.join(" - "," Java",""," cool"); //返回的消息是:" Java-is-cool" 请注意,如果元素为null,则" null"已添加。"
如果您不希望附加null,则初始化字符串为空值,如String arcType ="";