如何将指针传递给某个对象作为方法的参数?

时间:2015-06-07 15:04:27

标签: java

例如,我有这样的代码:

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";
}

没有别的办法吗?

1 个答案:

答案 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也是一个很好的替代方案。