Java 如何使用一个或多个不使用';你没有特别提到任何领域吗?

Java 如何使用一个或多个不使用';你没有特别提到任何领域吗?,java,Java,我想知道如何或是否可以使用一个或多个类方法设置多个类字段,这些类方法不专门引用任何字段?。我举了我能想到的最简单的例子 我很抱歉,如果这是一个非常明显的问题,已经得到了回答。我发现有几个问题看起来很相似,但它们涉及好几门课,令人困惑。我认为有这个问题是有益的,而且可能很容易回答 public class MyClass { private String str = "hello"; private String str2 = "ciao"; private String

我想知道如何或是否可以使用一个或多个类方法设置多个类字段,这些类方法不专门引用任何字段?。我举了我能想到的最简单的例子

我很抱歉,如果这是一个非常明显的问题,已经得到了回答。我发现有几个问题看起来很相似,但它们涉及好几门课,令人困惑。我认为有这个问题是有益的,而且可能很容易回答

public class MyClass {

    private String str = "hello";
    private String str2 = "ciao";
    private String str3 = "hola";

    public void changeSomeString(){
        changeString(str);
    }

    private void changeString(String s){
        s = "goodbye";
    }

    public void changeSpecificString(){
        str = "goodbye";
    }

    public void printString(){
        System.out.println(str);
    }

    public static void main(String args[]) {

        MyClass a = new MyClass();
        a.printString();
        a.changeSomeString();
        a.printString();
        a.changeSpecificString();
        a.printString();

    }

}
我不能说我期待,但我想要

hello
goodbye
goodbye
我收到了

hello
hello
goodbye

发生这种情况是因为Java方法参数对象引用。您正在将changeString(str)中字符串s的值从hello更改为Bye,但str的值仍然保持不变。

changeString
中它不应该是
str=“再见”
?调用
changeString(str)
str
的值传递到
changeString
,不是实际的变量。Java是按值传递的,所以在
String a=“abc”上没有使用类似于
void change(String s){s=“foo”}
的方法;更改(a)
不会改变
a
变量的内容,而是改变
s
变量的内容,该变量被视为
改变
方法的独立局部变量。替代解决方案取决于您真正想要实现的目标。我有点理解范围是它不起作用的原因,尽管我不知道诸如“传递值”之类的术语。我已经更改了问题以指定我的意图。有没有一种方法可以在没有30个setter的情况下设置30个字符串字段?如果你想迭代某个类的字段,你可以使用反射机制(官方教程:),但是要注意,与直接给字段赋值或执行简单的setter方法相比,它的速度非常慢。