【发布时间】:2014-01-03 01:47:43
【问题描述】:
我有一个创建 String 的方法和另一个更改字符串的方法
void create(){
String s;
edit(s);
System.out.println(s);
}
void edit(String str){
str = "hallo";
}
我的编译器说它“可能没有被初始化”。
谁能解释一下?
【问题讨论】:
-
Java 是按值传递的,您不要在
bearbeiten方法中将字符串分配给s。您将其分配给其本地str变量,因此s保持未初始化。 -
将其更改为
String s = null;,因为您知道,s可能未初始化。str = hallo不会修改原来的s变量。 -
简而言之,方法中的变量应该在同一个方法中初始化。另一方面,字段/类变量不能显式初始化,因为它们将获得默认值。
-
仅供参考,您不能更改字符串参数值。字符串是不可变的。将 edit() 更改为一个函数并返回一个新值。
-
我真的不明白为什么我不能更改引用的值。字符串不是我想的原始类型,为什么我应该返回值而不直接访问它的源?