class Trial {
static void main() {
int i = 0;
change(i);
System.out.println(i);
}
static void change(int n) {
n = n + 2;
}
}
Вывод, который я получаю - 0 Вывод, который я хочу - 2
Пожалуйста, помогите мне изменить мой код.
class Trial {
static void main() {
int i = 0;
change(i);
System.out.println(i);
}
static void change(int n) {
n = n + 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");
}
function
вJava
, кромеmethods
- person Ruchira Gayan Ranaweera   schedule 05.08.2014