字符串初始化问题

时间:2016-01-29 09:49:06

标签: java

为什么我出现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连接。使用修剪空间将删除,但我不想使用修剪。

我的问题是:

  1. 为什么我在第一种情况下出现The local variable arcType may not have been initialized错误?

  2. 在我使用null初始化字符串的第二种情况下,为什么我输出nullTest

  3. 我只想输出Test

4 个答案:

答案 0 :(得分:4)

1-仅会员&默认情况下初始化类变量本地变量不是

仅当传递的对象不是toString()时,才会隐式调用

2- null。如果是,则打印文字"null"。因此,为了将"Test"作为输出,您需要将字符串初始化为空字符串。

来自文档:Objects#toString()

  

返回调用toString的非null参数的结果   "空"对于空参数。

答案 1 :(得分:1)

然后你应该用空的init:

String arcType = "";

在内部方法中,必须在使用之前初始化所有声明的变量。

Null也是一个值,因此当您将String引用为null并将其连接时,它将使用null + concate值。

答案 2 :(得分:0)

  1. Yiu正如他所说的那样疯狂地得到错误 - 变量可能没有初始化(如果条件是假的 - 它不会)

  2. +=运算符是s = s + "test"的语法糖。由于最初s为null,你将得到`null +“test”

  3. 您应该将s初始化为空字符串`

答案 3 :(得分:0)

首先,在对任何变量进行操作之前,即使用null初始化它也可以初始化它。但它应该初始化。

其次,如果我们阅读java文档,我们会发现当字符串初始化为null并且如果我们在其上调用join或+运算符时,它将被视为具有空值。 "返回一个新的字符串,该字符串由连接在一起的CharSequence元素的副本和指定的分隔符的副本组成。

例如, String message = String.join(" - "," Java",""," cool");      //返回的消息是:" Java-is-cool" 请注意,如果元素为null,则" null"已添加。"

如果您不希望附加null,则初始化字符串为空值,如String arcType ="";