有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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连接起来。使用修剪空间将删除,但我不想使用修剪

我的问题是:

  1. 为什么我在第一个案例中出现了The local variable arcType may not have been initialized错误

  2. 在第二种情况下,当我用null初始化字符串时,为什么会得到输出nullTest

我只想要输出Test


共 (4) 个答案

  1. # 1 楼答案

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

    仅当传递的对象不是null时,才会隐式调用2-toString()。如果是,则打印文字"null"。因此,为了将"Test"作为输出,需要将字符串初始化为空字符串

    从文档:Objects#toString()

    returns the result of calling toString for a non-null argument and "null" for a null argument.

  2. # 2 楼答案

    然后,应使用空值初始化:

    String arcType = "";
    

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

    Null也是一个值,因此当您将字符串引用为Null并将其表示为concate时,它将使用Null+concate值

  3. # 3 楼答案

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

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

    比如说,, 字符串消息=字符串。join(“-”,“Java”,“is”,“cool”); //返回的消息是:“Java很酷” 注意,如果元素为null,则添加“null”。"

    如果您不希望追加null,请使用空值初始化字符串,如string arcType=“”

  4. # 4 楼答案

    1. Yiu得到的错误与上面所说的完全一样-变量可能未初始化(如果条件为false-则不会)

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

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