例如,我有这样的代码:
SomeClass item = new SomeClass();
OtherClass.someVoidMethod(item); //there was some changes with item
然后在课堂上,调用方法someVoidMethod(item)
的项目不会改变,因为我们在这个方法中使用该项目的副本。在C / C ++中有指针。我在Java中寻找类似的东西。
有更好的例子: 我无法编辑方法
中的字符串public class Main {
public static void main(String[] args) {
String string = "String";
changeIt(string);
System.out.println(string);
}
public static void changeIt(String string){
string = string + " edited";
}
我需要什么样的suntax才能做到这一点?我依法使用*string
等等,但我做错了。
我发现这段代码不会按照我想要的方式运作
public class Main {
public static void main(String[] args) {
SomeClass someClass = new SomeClass();
OtherClass.changeIt(someClass.getValue());
}
}
class SomeClass {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
class OtherClass {
public static void changeIt(String string){
string = "someStr";
}
}
所以我需要使用类似的东西:
public static void main(String[] args) {
SomeClass someClass = new SomeClass();
someClass.setValue(OtherClass.changeIt(someClass.getValue()));
}
public static String changeIt(String string){
return "someStr";
}
没有别的办法吗?
答案 0 :(得分:1)
简化长篇故事:将参数作为输入用于方法,并将返回值用作输出。这将使您的代码更易读,更易于维护。
例如:
public class Main {
public static void main(String[] args) {
String string = "String";
String modifiedString = changeIt(string);
System.out.println(modifiedString);
}
public static String changeIt(String string) {
return string + " edited";
}
}
如果将字符串包装到可变容器中,则可以在方法中对其进行修改。但是对于您的示例代码,我强烈建议不要使用此方法!
class StringContainer {
String content;
}
public class Main {
public static void main(String[] args) {
StringContainer container = new StringContainer();
container.content = "String";
changeIt(container);
System.out.println(container.content);
}
public static void changeIt(StringContainer container) {
container.content += " edited";
}
}
@aioobe提到的StringBuilder
也是一个很好的替代方案。