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方法相比,它的速度非常慢。