class Trial {
static void main() {
int i = 0;
change(i);
System.out.println(i);
}
static void change(int n) {
n = n + 2;
}
}
输出我得到 - 0 我想要的输出 - 2
请帮我改变我的代码。
答案 0 :(得分:2)
Java中的所有内容都是按值传递的: http://www.javaranch.com/campfire/StoryPassBy.jsp
请改为尝试:
class Trial {
static void main() {
int i = 0;
i = change(i);
System.out.println(i);
}
static int change(int n) {
return n + 2;
}
}
修改强>
为方法的参数提供值的副本。该值可以是原始值(基元)或对象引用(对象)。
对于对象,引用的副本意味着您可以更改方法中对象的状态。您不能做的是更改已更改参数所指的状态。
示例1:
class Person {
private String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
}
Person p = new Person("James");
changeName(p);
System.out.println(p.getName()); // This will output Changed
...
public void changeName(Person person) {
person.setName("Changed");
}
示例2:
Person p = new Person("James");
changeName(p);
System.out.println(p.getName()); // This will output James
...
public void changeName(Person person) {
person = new Person(); // person is now referring to new object, not the one passed
person.setName("Changed");
}