gpt4 book ai didi

java - "Variable may not have been initialized"

转载 作者:行者123 更新时间:2023-12-01 06:25:56 26 4
gpt4 key购买 nike

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

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

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

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

有人能解释一下吗?

最佳答案

Variable may not have been initialized

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

另一件事同样重要,你的代码永远不会像你预期的那样工作java 中的字符串是不可变的,因此您无法编辑字符串,因此您应该更改方法 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";
}

在这个著名的问题中了解有关 java 按值传递的更多信息: Is Java "pass-by-reference"?

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

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
}


}

关于java - "Variable may not have been initialized",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com