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