“变量可能尚未初始化”

时间:2014-01-03 01:47:44

标签: java reference

我有一个创建String的方法和另一个更改字符串

的方法
void create(){
    String s;
    edit(s);
    System.out.println(s);
}

void edit(String str){
    str = "hallo";
}

我的编译器说它“可能尚未初始化”。

有人可以解释一下吗?

4 个答案:

答案 0 :(得分:2)

  

变量可能尚未初始化

在方法中定义s时,必须在其中初始化s,程序中的每个变量在使用其值之前必须具有值。

另一件重要的事情是,你的代码永远不会像预期的那样工作 java中的字符串是不可变的,因此您无法编辑String,因此您应该更改方法edit(Str s)

我将你的代码更改为类似的东西,但我认为你的编辑方法应该做另一件事,而不是返回“hallo”。

void create(){
    String s=null;
    s =edit(); // passing a string to edit now have no sense
    System.out.println(s);
}
// calling edit to this method have no sense anymore 
String edit(){
    return "hallo"; 
}

在这个着名的问题:Is Java "pass-by-reference"?

中,阅读更多关于java传递值的信息

请参阅此简单示例,显示java是按值传递的。我不能只用字符串做一个例子,因为字符串是不可改变的。所以我创建了一个包含String的包装类,该String可以看到差异。

public class Test{

static class A{
 String s = "hello";

 @Override
 public String toString(){
   return s;
 }

}

public static void referenceChange(A a){
    a = new A(); // here a is pointing to a new object just like your example
    a.s = "bye-bye";
}

public static void modifyValue(A a){
   a.s ="bye-bye";// here you are modifying your object cuase this object is modificable not like Strings that you can't modify any property
}

public static void main(String args[]){
   A a = new A();
   referenceChange(a);
   System.out.println(a);//prints hello, so here you realize that a doesn't change cause pass by value!!
   modifyValue(a);
   System.out.println(a); // prints bye-bye 
}


}

答案 1 :(得分:-1)

您在方法s中声明了局部变量create,因此您需要在使用它之前对其进行初始化。请记住,java没有局部变量的默认值。 初始String s = ""或任何比您的代码正常运行的值。

答案 2 :(得分:-3)

尝试初始化字符串" s"到一个空值,因为你已经声明了一个变量" s"但它尚未初始化。因此,当用作参数时,它不能传递该变量的引用。

String s = null;

希望这有帮助

答案 3 :(得分:-3)

给你的变量S一个值,或者像Jeroen Vanneve所说“将它改为String s = null;”